public void ShouldReturnTwoContextesWithNoChilds() { DatabaseNameDatabaseContextHandler databaseNameDatabaseContextHandler = new DatabaseNameDatabaseContextHandler(templateHandlerNew); TableNameTableContextHandler tableNameTableContextHandler = new TableNameTableContextHandler(templateHandlerNew); var results = _tested.ExtractAllContextUntilDepth($"{databaseNameDatabaseContextHandler.Signature}-{tableNameTableContextHandler.Signature}", 0); Assert.IsNotNull(results); var resultAsList = results.ToList(); CollectionAssert.IsNotEmpty(resultAsList); Assert.AreEqual(2, resultAsList.Count); var first = resultAsList[0]; Assert.IsNotNull(first.current); Assert.IsNotNull(first.childs); CollectionAssert.IsEmpty(first.childs); Assert.AreEqual(first.current.StartContextDelimiter, databaseNameDatabaseContextHandler.StartContext); Assert.AreEqual(first.current.InnerContent, String.Empty); Assert.AreEqual(first.current.EndContextDelimiter, databaseNameDatabaseContextHandler.EndContext); var second = resultAsList[1]; Assert.IsNotNull(second.current); Assert.IsNotNull(second.childs); CollectionAssert.IsEmpty(second.childs); Assert.AreEqual(second.current.StartContextDelimiter, tableNameTableContextHandler.StartContext); Assert.AreEqual(second.current.InnerContent, String.Empty); Assert.AreEqual(second.current.EndContextDelimiter, tableNameTableContextHandler.EndContext); }
private void PreProcess(ITemplateModel templateModel, IDictionary <string, AbstactPreprocessorContextHandler> handlersByStartContext) { var contextes = contextVisitor.ExtractAllContextUntilDepth(templateModel.TemplatedFileContent, 1); var contextesAndProcessesResult = contextes.Select(context => (contextAsString: ToContextValue(context), processedContextContent: PreProcess(ToContextValue(context), context, handlersByStartContext), context)).ToList(); int lenghtSumDifference = 0; var result = templateModel.TemplatedFileContent; foreach (var current in contextesAndProcessesResult) { result = result.Substring(0, current.context.current.StartIndex + lenghtSumDifference) + current.processedContextContent + result.Substring(current.context.current.StartIndex + current.contextAsString.Length + lenghtSumDifference, result.Length - (current.context.current.StartIndex + current.contextAsString.Length + lenghtSumDifference)); lenghtSumDifference = lenghtSumDifference + (current.processedContextContent.Length - current.contextAsString.Length); } templateModel.TemplatedFileContent = result; }
public string HandleTemplate(string templateString, IDatabaseContext databaseContext) { if (!templateValidator.TemplateStringValidation(templateString)) { return(templateString); } var contextes = contextVisitor.ExtractAllContextUntilDepth(templateString, 0); var qualifiedContextes = toQualifiedTemplateContextConverter.ToQualifiedTemplateContextes(contextes); var result = templateString; var charDiffSum = 0; foreach (var context in qualifiedContextes) { var contextContent = context.current.Content; var processorDatabaseContext = databaseContext; var contextContentProcessed = templateContextProcessor.ProcessTemplateContextComposite(context, processorDatabaseContext); result = $"{result.Substring(0, context.current.StartIndex + charDiffSum)}{contextContentProcessed}{result.Substring(context.current.StartIndex + contextContent.Length + charDiffSum)}"; charDiffSum = charDiffSum + contextContentProcessed.Length - contextContent.Length; } return(result); }