@Test public void testThatTagNodeIsSelfClosing() { for (int i = 0; i < selfClosing.length; i++) { tagNode.setName(selfClosing[i]); assertTrue(tagNode.isSelfClosing(template)); } }
@Test public void testThatTagNodeIsNotSelfClosingIfNotSelfClosingtag() { for (int i = 0; i < notSelfClosing.length; i++) { tagNode.setName(notSelfClosing[i]); assertFalse(tagNode.isSelfClosing(template)); } }
@Test public void testThatTagNodeIsNotSelfClosingIfXmlDoctype() { template.setMode(Jade4J.Mode.XML); for (int i = 0; i < selfClosing.length; i++) { tagNode.setName(selfClosing[i]); assertFalse(tagNode.isSelfClosing(template)); } }
@Test public void testThatTagNodeIsNotTerseIfTempalteSettingIsNotTerse() { template.setMode(Jade4J.Mode.XHTML); for (int i = 0; i < selfClosing.length; i++) { tagNode.setName(selfClosing[i]); assertFalse(tagNode.isTerse(template)); } }
@Test public void testThatTagNodeIsNotSelfclosingIfTheTagIsNotSelfclosing() { template.setMode(Jade4J.Mode.HTML); for (int i = 0; i < notSelfClosing.length; i++) { tagNode.setName(notSelfClosing[i]); assertFalse(tagNode.isTerse(template)); } }
@Test public void testThatTagNodeIsTerse() { template.setMode(Jade4J.Mode.HTML); for (int i = 0; i < selfClosing.length; i++) { tagNode.setName(selfClosing[i]); assertTrue(tagNode.isTerse(template)); } }
private Node parseTag() { // ast-filter look-ahead int i = 2; if (lookahead(i) instanceof Attribute) { i++; } if (lookahead(i) instanceof Colon) { i++; if (lookahead(i) instanceof Indent) { return this.parseASTFilter(); } } Token token = nextToken(); String name = token.getValue(); TagNode tagNode = new TagNode(); tagNode.setLineNumber(lexer.getLineno()); tagNode.setFileName(filename); tagNode.setName(name); tagNode.setValue(name); while (true) { Token incomingToken = peek(); if (incomingToken instanceof CssId) { Token tok = nextToken(); tagNode.addAttribute("id", tok.getValue()); continue; } else if (incomingToken instanceof CssClass) { Token tok = nextToken(); tagNode.addAttribute("class", tok.getValue()); continue; } else if (incomingToken instanceof Attribute) { Attribute tok = (Attribute) nextToken(); tagNode.addAttributes(tok.getAttributes()); continue; } else { break; } } // check immediate '.' boolean dot = false; if (peek() instanceof Dot) { dot = true; tagNode.setTextOnly(true); nextToken(); } // (text | code | ':')? if (peek() instanceof Text) { tagNode.setTextNode(parseText()); } else if (peek() instanceof Expression) { tagNode.setCodeNode(parseCode()); } else if (peek() instanceof Colon) { Token next = nextToken(); BlockNode block = new BlockNode(); block.setLineNumber(next.getLineNumber()); block.setFileName(filename); tagNode.setBlock(block); block.push(parseExpr()); } // newline* while (peek() instanceof Newline) { nextToken(); } if (!tagNode.isTextOnly()) { if (Arrays.asList(textOnlyTags).contains(tagNode.getName())) { tagNode.setTextOnly(true); } } // script special-case if ("script".equals(tagNode.getName())) { String type = tagNode.getAttribute("type"); if (!dot && StringUtils.isNotBlank(type)) { String cleanType = type.replaceAll("^['\"]|['\"]$", ""); if (!"text/javascript".equals(cleanType)) { tagNode.setTextOnly(false); } } } if (peek() instanceof Indent) { if (tagNode.isTextOnly()) { lexer.setPipeless(true); tagNode.setTextNode(parseTextBlock()); lexer.setPipeless(false); } else { Node blockNode = block(); if (tagNode.hasBlock()) { tagNode.getBlock().getNodes().addAll(blockNode.getNodes()); } else { tagNode.setBlock(blockNode); } } } return tagNode; }