public void SectionToken_Uniqueness() { var str = new StringSlice("foo"); var literal = new LiteralToken { Content = new[] { str }, ContentStartPosition = 0, ContentEndPosition = 2, Indent = 0, IsClosed = true, IsWhitespace = false }; var blockToken = new SectionToken(); blockToken.Children.Add(literal); var blockToken2 = new SectionToken(); blockToken2.Children.Add(literal); Assert.False(blockToken.Equals(null)); Assert.StrictEqual(blockToken, blockToken2); Assert.Equal(blockToken.GetHashCode(), blockToken2.GetHashCode()); }
/// <summary> /// Tries to open a section tag using the slice /// </summary> /// <param name="processor">The processor</param> /// <param name="slice">The slice</param> /// <returns>The result of the match</returns> public override ParserState TryOpenBlock(Processor processor, ref StringSlice slice) { var tagStart = slice.Start - processor.CurrentTags.StartTag.Length; var index = slice.Start; while (slice[index].IsWhitespace()) { index++; } var match = slice[index]; if (match == OpeningTagDelimiter) { slice.Start = index + 1; // Skip delimiter while (slice.CurrentChar.IsWhitespace()) { slice.NextChar(); } var startIndex = slice.Start; // Take characters until closing tag while (!slice.IsEmpty && !slice.Match(processor.CurrentTags.EndTag)) { slice.NextChar(); } var sectionName = slice.ToString(startIndex, slice.Start).TrimEnd(); var contentStartPosition = slice.Start + processor.CurrentTags.EndTag.Length; var sectionTag = new SectionToken { SectionName = sectionName, StartPosition = tagStart, ContentStartPosition = contentStartPosition, Parser = this, IsClosed = false }; processor.CurrentToken = sectionTag; slice.Start = contentStartPosition; return(ParserState.Break); } return(ParserState.Continue); }
public void It_Can_Render_Multiple_IEnumerators() { const string result = "abcabc"; var settings = new RendererSettingsBuilder().BuildSettings(); // Get Enumerator doesn't exist on string (netstandard 1.3) // will be added back in netstandard 2.0 var enumerator = "abc".ToCharArray().GetEnumerator(); var context = new Context( new { list = enumerator }, settings, settings.RenderSettings); var stringRenderer = new StringRender(StreamWriter, settings.RendererPipeline); var sectionTokenRenderer = new SectionTokenRenderer(); var sectionToken = new SectionToken { SectionName = "list", Children = new List <MustacheToken> { new InterpolationToken { Content = new StringSlice(".") }, } }; sectionTokenRenderer.Write(stringRenderer, sectionToken, context); sectionTokenRenderer.Write(stringRenderer, sectionToken, context); StreamWriter.Flush(); MemStream.Position = 0; var sr = new StreamReader(MemStream); var myStr = sr.ReadToEnd(); Assert.Equal(result, myStr); }