public void Constructor_MalformedHtmlStyleAttributes_ThrowsMalformedTagException() { const string templateLine = "p(a='b'"; var line = new HamlLine(templateLine, HamlRuleEnum.Tag, indent: ""); Assert.Throws<HamlParserMalformedTagException>(() => new HamlNodeTag(line)); }
public void Walk_NestedTags_AppendsCorrectTags() { // Arrange HamlLine nestedText = new HamlLine("Hello world", HamlRuleEnum.PlainText, indent: " ", isInline: true); var tagNode = new HamlNodeHtmlComment(new HamlLine("", HamlRuleEnum.HtmlComment, indent: "")); tagNode.AddChild(new HamlNodeTextContainer(nestedText)); // Act _walker.Walk(tagNode); // Assert string expectedComment = "<!--" + nestedText.Indent + nestedText.Content + " -->"; Assert.That(_classBuilderMock.Build(""), Is.EqualTo(expectedComment)); }
public void Walk_TextNode_AppendsCorrectTag() { // Arrange var content = new HamlLine("Simple content", HamlRuleEnum.PlainText, indent: ""); var document = HamlDocumentBuilder.Create("", new HamlNodeTextContainer(content)); Type baseType = typeof(Template); // Act var builder = new ClassBuilderMock(); new HamlDocumentWalker(builder).Walk(document, "", baseType, new List<string>()); // Assert Assert.That(builder.Build(""), Is.EqualTo(content.Content)); }
private void ProcessInlineTags(HamlLine line, List <HamlLine> result) { if (IsRuleThatAllowsInlineContent(line.HamlRule)) { int contentIndex = GetEndOfTagIndex('%' + line.Content) - 1; if (contentIndex < line.Content.Length - 1) { string subTag = line.Content.Substring(contentIndex).TrimStart(); line.Content = line.Content.Substring(0, contentIndex).Trim(); subTag = AddImplicitDivTag(subTag); var subTagRule = HamlRuleFactory.ParseHamlRule(ref subTag); var subLine = new HamlLine(subTag, subTagRule, line.Indent + "\t", line.SourceFileLineNo, true); ProcessInlineTags(subLine, result); } } result.Insert(0, line); }
public IEnumerable<HamlLine> ParseHamlLine(string currentLine, int currentLineIndex) { int whiteSpaceIndex = 0; while (whiteSpaceIndex < currentLine.Length && (currentLine[whiteSpaceIndex] == ' ' || currentLine[whiteSpaceIndex] == '\t')) { whiteSpaceIndex++; } string indent = currentLine.Substring(0, whiteSpaceIndex); string content = (whiteSpaceIndex == currentLine.Length) ? "" : currentLine.Substring(whiteSpaceIndex); content = AddImplicitDivTag(content); var hamlRule = HamlRuleFactory.ParseHamlRule(ref content); var result = new List<HamlLine>(); var line = new HamlLine(content, hamlRule, indent, currentLineIndex, false); ProcessInlineTags(line, result); return result; }
public IEnumerable <HamlLine> ParseHamlLine(string currentLine, int currentLineIndex) { int whiteSpaceIndex = 0; while (whiteSpaceIndex < currentLine.Length && (currentLine[whiteSpaceIndex] == ' ' || currentLine[whiteSpaceIndex] == '\t')) { whiteSpaceIndex++; } string indent = currentLine.Substring(0, whiteSpaceIndex); string content = (whiteSpaceIndex == currentLine.Length) ? "" : currentLine.Substring(whiteSpaceIndex); content = AddImplicitDivTag(content); var hamlRule = HamlRuleFactory.ParseHamlRule(ref content); var result = new List <HamlLine>(); var line = new HamlLine(content, hamlRule, indent, currentLineIndex, false); ProcessInlineTags(line, result); return(result); }
public static IEnumerable<HamlLine> ParseHamlLine(string currentLine, int currentLineIndex) { int whiteSpaceIndex = 0; while (whiteSpaceIndex < currentLine.Length && (currentLine[whiteSpaceIndex] == ' ' || currentLine[whiteSpaceIndex] == '\t')) { whiteSpaceIndex++; } string indent = currentLine.Substring(0, whiteSpaceIndex); string content = (whiteSpaceIndex == currentLine.Length) ? "" : currentLine.Substring(whiteSpaceIndex); int tokenLength = 0; var hamlRule = HamlRuleFactory.ParseHamlRule(ref content, out tokenLength); var metrics = new HamlSourceFileMetrics(currentLineIndex, whiteSpaceIndex, currentLine.Length - whiteSpaceIndex, tokenLength); var result = new List<HamlLine>(); var line = new HamlLine(content, hamlRule, metrics, indent, false); ProcessInlineTags(line, result); return result; }
public static HamlNode GetHamlNode(HamlLine nodeLine) { switch (nodeLine.HamlRule) { case HamlRuleEnum.PlainText: return new HamlNodeTextContainer(nodeLine); case HamlRuleEnum.Tag: return new HamlNodeTag(nodeLine); case HamlRuleEnum.HamlComment: return new HamlNodeHamlComment(nodeLine); case HamlRuleEnum.HtmlComment: return new HamlNodeHtmlComment(nodeLine); case HamlRuleEnum.Evaluation: return new HamlNodeEval(nodeLine); case HamlRuleEnum.Code: return new HamlNodeCode(nodeLine); case HamlRuleEnum.DocType: return new HamlNodeDocType(nodeLine); case HamlRuleEnum.Partial: return new HamlNodePartial(nodeLine); default: throw new HamlParserUnknownRuleException(nodeLine.Content, nodeLine.Metrics); } }
public void Constructor_CalculatesIndentCountCorrectly(string indent, string content, int expectedIndent) { var line = new HamlLine(content, HamlRuleEnum.PlainText, indent: indent); Assert.AreEqual(expectedIndent, line.IndentCount); }
private void ProcessInlineTags(HamlLine line, List<HamlLine> result) { if (IsRuleThatAllowsInlineContent(line.HamlRule)) { int contentIndex = GetEndOfTagIndex('%' + line.Content)-1; if (contentIndex < line.Content.Length-1) { string subTag = line.Content.Substring(contentIndex).TrimStart(); line.Content = line.Content.Substring(0, contentIndex).Trim(); subTag = AddImplicitDivTag(subTag); var subTagRule = HamlRuleFactory.ParseHamlRule(ref subTag); var subLine = new HamlLine(subTag, subTagRule, line.Indent + "\t", line.SourceFileLineNo, true); ProcessInlineTags(subLine, result); } } result.Insert(0, line); }
private static void ProcessInlineTags(HamlLine line, List<HamlLine> result) { if (IsRuleThatAllowsInlineContent(line.HamlRule)) { int contentIndex = GetEndOfTagIndex('%' + line.Content)-1; if (contentIndex < line.Content.Length-1) { string subTag = line.Content.Substring(contentIndex); line.Content = line.Content.Substring(0, contentIndex); int tokenLength; var subTagRule = HamlRuleFactory.ParseHamlRule(ref subTag, out tokenLength); var colNo = contentIndex + line.Metrics.TokenLength; var metrics = new HamlSourceFileMetrics(line.Metrics.LineNo, line.Metrics.ColNo + colNo, line.Metrics.Length - colNo, tokenLength); var subLine = new HamlLine(subTag, subTagRule, metrics, line.Indent + "\t", isInline: true); ProcessInlineTags(subLine, result); } } result.Insert(0, line); }
public void AddLine(HamlLine line) { _hamlLines.Add(line); }
public HamlNodeTextContainer(HamlLine nodeLine) : base(nodeLine) { ParseFragments(nodeLine.Content); }
public HamlNodeCode(HamlLine line) : base(line) { }
public HamlNodePartial(HamlLine line) : base(line) { IsResolved = false; }
protected HamlNode(HamlLine nodeLine) { _line = nodeLine; Content = nodeLine.Content; SourceFileLineNum = _line.SourceFileLineNo; }
public void GetHamlNode_DifferentHamlLineTypes_ReturnsCorrectHamlNode(HamlRuleEnum rule, Type nodeType) { var line = new HamlLine("Blah", rule, indent: ""); var result = HamlNodeFactory.GetHamlNode(line); Assert.That(result, Is.InstanceOf(nodeType)); }
public void Children_IncompleteVariableReference_ThrowsException() { var line = new HamlLine("#{variable", HamlRuleEnum.PlainText, indent: ""); Assert.Throws<HamlParserMalformedVariableException>(() => new HamlNodeTextContainer(line)); }
public HamlNodeDocType(HamlLine line) : base(line) { }
public void GetHamlNode_TagSubTypes_ThrowsHamlUnknownRuleException(HamlRuleEnum rule, Type nodeType) { var line = new HamlLine("Blah", rule, indent: ""); Assert.Throws<HamlParserUnknownRuleException>(() => HamlNodeFactory.GetHamlNode(line)); }
public void Constructor_MaintainsIndentForNonTextNodes(string indent, string content, HamlRuleEnum rule, int expectedIndent) { var line = new HamlLine(content, rule, indent: indent); Assert.AreEqual(expectedIndent, line.IndentCount); }
public HamlNodeEval(HamlLine line) : base(line) { }
public void ParseHamlFile_UnknownRuleType_ThrowsUnknownRuleException() { var line = new HamlLine("", HamlRuleEnum.Unknown, indent: ""); var file = new HamlFile(""); file.AddLine(line); Assert.Throws<HamlParserUnknownRuleException>(() => _parser.ParseHamlFile(file)); }