@Test
  public void testParseSimpleTextWithBoldAndItalics() {
    WikiPageNode wikiPageNode = getWikiPageNode("text-5.creole");

    Assert.assertNotNull(wikiPageNode);
    Assert.assertEquals(1, wikiPageNode.getChildASTNodesCount());

    ParagraphNode paragraphNode = (ParagraphNode) wikiPageNode.getChildASTNode(0);

    Assert.assertEquals(1, paragraphNode.getChildASTNodesCount());

    LineNode lineNode = (LineNode) paragraphNode.getChildASTNode(0);

    Assert.assertEquals(4, lineNode.getChildASTNodesCount());

    UnformattedTextNode unformattedTextNode = (UnformattedTextNode) lineNode.getChildASTNode(0);

    unformattedTextNode = (UnformattedTextNode) unformattedTextNode.getChildASTNode(0);

    Assert.assertEquals("Text with some content in ", unformattedTextNode.getContent());

    BoldTextNode boldTextNode = (BoldTextNode) lineNode.getChildASTNode(1);

    Assert.assertEquals(1, boldTextNode.getChildASTNodesCount());

    FormattedTextNode formattedTextNode = (FormattedTextNode) boldTextNode.getChildASTNode(0);

    CollectionNode collectionNode = (CollectionNode) formattedTextNode.getChildASTNode(0);

    unformattedTextNode = (UnformattedTextNode) collectionNode.get(0);

    Assert.assertEquals("bold", unformattedTextNode.getContent());
  }
  @Test
  public void testSimpleEscapedCharacter() {
    WikiPageNode wikiPageNode = getWikiPageNode("escape-1.creole");

    Assert.assertNotNull(wikiPageNode);
    Assert.assertEquals(1, wikiPageNode.getChildASTNodesCount());

    ParagraphNode paragraphNode = (ParagraphNode) wikiPageNode.getChildASTNode(0);

    Assert.assertEquals(2, paragraphNode.getChildASTNodesCount());

    LineNode lineNode = (LineNode) paragraphNode.getChildASTNode(0);

    Assert.assertEquals(2, lineNode.getChildASTNodesCount());

    UnformattedTextNode unformattedTextNode = (UnformattedTextNode) lineNode.getChildASTNode(0);

    ScapedNode scapedNode = (ScapedNode) unformattedTextNode.getChildASTNode(0);

    Assert.assertEquals("E", scapedNode.getContent());

    CollectionNode collectionNode = (CollectionNode) lineNode.getChildASTNode(1);

    unformattedTextNode = (UnformattedTextNode) collectionNode.get(0);

    Assert.assertEquals("SCAPED1", unformattedTextNode.getContent());
  }
  @Test
  public void testParseSimpleTextWithForcedEndline() {
    WikiPageNode wikiPageNode = getWikiPageNode("text-7.creole");

    Assert.assertNotNull(wikiPageNode);
    Assert.assertEquals(1, wikiPageNode.getChildASTNodesCount());

    ParagraphNode paragraphNode = (ParagraphNode) wikiPageNode.getChildASTNode(0);

    Assert.assertEquals(1, paragraphNode.getChildASTNodesCount());

    LineNode lineNode = (LineNode) paragraphNode.getChildASTNode(0);

    Assert.assertEquals(3, lineNode.getChildASTNodesCount());

    UnformattedTextNode unformattedTextNode = (UnformattedTextNode) lineNode.getChildASTNode(0);

    unformattedTextNode = (UnformattedTextNode) unformattedTextNode.getChildASTNode(0);

    Assert.assertEquals("Text with ", unformattedTextNode.getContent());

    CollectionNode collectionNode = (CollectionNode) lineNode.getChildASTNode(1);

    Assert.assertEquals(1, collectionNode.size());
    Assert.assertTrue(collectionNode.get(0) instanceof ForcedEndOfLineNode);

    collectionNode = (CollectionNode) lineNode.getChildASTNode(2);

    unformattedTextNode = (UnformattedTextNode) collectionNode.get(0);

    Assert.assertEquals("forced line break", unformattedTextNode.getContent());
  }
  @Test
  public void testParseSimpleTextBoldAndItalics() {
    WikiPageNode wikiPageNode = getWikiPageNode("text-6.creole");

    Assert.assertNotNull(wikiPageNode);
    Assert.assertEquals(1, wikiPageNode.getChildASTNodesCount());

    ParagraphNode paragraphNode = (ParagraphNode) wikiPageNode.getChildASTNode(0);

    Assert.assertEquals(1, paragraphNode.getChildASTNodesCount());

    LineNode lineNode = (LineNode) paragraphNode.getChildASTNode(0);

    Assert.assertEquals(2, lineNode.getChildASTNodesCount());

    UnformattedTextNode unformattedTextNode = (UnformattedTextNode) lineNode.getChildASTNode(0);

    unformattedTextNode = (UnformattedTextNode) unformattedTextNode.getChildASTNode(0);

    Assert.assertEquals("Text ", unformattedTextNode.getContent());

    BoldTextNode boldTextNode = (BoldTextNode) lineNode.getChildASTNode(1);

    Assert.assertEquals(1, boldTextNode.getChildASTNodesCount());

    ItalicTextNode italicTextNode = (ItalicTextNode) boldTextNode.getChildASTNode(0);

    CollectionNode collectionNode = (CollectionNode) italicTextNode.getChildASTNode(0);

    unformattedTextNode = (UnformattedTextNode) collectionNode.get(0);

    Assert.assertEquals("ItalicAndBold", unformattedTextNode.getContent());
  }
  @Test
  public void testParseSimpleLinkTag() {
    WikiPageNode wikiPageNode = getWikiPageNode("link-1.creole");

    Assert.assertNotNull(wikiPageNode);

    ParagraphNode paragraphNode = (ParagraphNode) wikiPageNode.getChildASTNode(0);

    LineNode lineNode = (LineNode) paragraphNode.getChildASTNode(0);

    Assert.assertEquals(1, lineNode.getChildASTNodesCount());

    LinkNode linkNode = (LinkNode) lineNode.getChildASTNode(0);

    Assert.assertEquals("link", linkNode.getLink());

    CollectionNode collectionNode = linkNode.getAltCollectionNode();

    Assert.assertNotNull(collectionNode);
    Assert.assertEquals(1, collectionNode.size());

    List<ASTNode> astNodes = collectionNode.getASTNodes();

    UnformattedTextNode unformattedTextNode = (UnformattedTextNode) astNodes.get(0);

    CollectionNode unformattedTextNodes = (CollectionNode) unformattedTextNode.getChildASTNode(0);

    unformattedTextNode = (UnformattedTextNode) unformattedTextNodes.get(0);

    Assert.assertEquals("alternative text", unformattedTextNode.getContent());
  }
  @Test
  public void testParseSimpleLinkTagWithoutDescription() {
    WikiPageNode wikiPageNode = getWikiPageNode("link-2.creole");

    Assert.assertNotNull(wikiPageNode);

    ParagraphNode paragraphNode = (ParagraphNode) wikiPageNode.getChildASTNode(0);

    LineNode lineNode = (LineNode) paragraphNode.getChildASTNode(0);

    Assert.assertEquals(1, lineNode.getChildASTNodesCount());

    LinkNode linkNode = (LinkNode) lineNode.getChildASTNode(0);

    Assert.assertEquals("link", linkNode.getLink());
    Assert.assertNull(linkNode.getAltCollectionNode());
  }
  @Test
  public void testParseSimpleImageTagWithNoAlternative() {
    WikiPageNode wikiPageNode = getWikiPageNode("image-2.creole");

    Assert.assertNotNull(wikiPageNode);

    ParagraphNode paragraphNode = (ParagraphNode) wikiPageNode.getChildASTNode(0);

    LineNode lineNode = (LineNode) paragraphNode.getChildASTNode(0);

    Assert.assertEquals(1, lineNode.getChildASTNodesCount());

    ImageNode imageNode = (ImageNode) lineNode.getChildASTNode(0);

    Assert.assertEquals("link", imageNode.getLink());

    CollectionNode collectionNode = imageNode.getAltNode();

    Assert.assertNull(collectionNode);
  }
  @Test
  public void testParseOnlySpacesContentInImageTag() {
    WikiPageNode wikiPageNode = getWikiPageNode("image-3.creole");

    Assert.assertNotNull(wikiPageNode);

    ParagraphNode paragraphNode = (ParagraphNode) wikiPageNode.getChildASTNode(0);

    LineNode lineNode = (LineNode) paragraphNode.getChildASTNode(0);

    Assert.assertEquals(1, lineNode.getChildASTNodesCount());

    ImageNode imageNode = (ImageNode) lineNode.getChildASTNode(0);

    Assert.assertEquals("  ", imageNode.getLink());

    CollectionNode collectionNode = imageNode.getAltNode();

    Assert.assertNull(collectionNode);
  }
  @Test
  public void testParseMultipleImageTags() {
    WikiPageNode wikiPageNode = getWikiPageNode("image-5.creole");

    Assert.assertNotNull(wikiPageNode);

    ParagraphNode paragraphNode = (ParagraphNode) wikiPageNode.getChildASTNode(0);

    LineNode lineNode = (LineNode) paragraphNode.getChildASTNode(0);

    Assert.assertEquals(5, lineNode.getChildASTNodesCount());

    List<ASTNode> astNodes = lineNode.getChildASTNodes();

    for (int i = 0; i < astNodes.size(); ) {
      ImageNode imageNode = (ImageNode) astNodes.get(i);

      Assert.assertEquals("L" + ++i, imageNode.getLink());
    }
  }
  @Test
  public void testParseEmpyImageTag() {
    WikiPageNode wikiPageNode = getWikiPageNode("image-4.creole");

    Assert.assertNotNull(wikiPageNode);

    ParagraphNode paragraphNode = (ParagraphNode) wikiPageNode.getChildASTNode(0);

    LineNode lineNode = (LineNode) paragraphNode.getChildASTNode(0);

    Assert.assertEquals(1, lineNode.getChildASTNodesCount());

    ImageNode imageNode = (ImageNode) lineNode.getChildASTNode(0);

    Assert.assertEquals(StringPool.BLANK, imageNode.getLink());

    CollectionNode collectionNode = imageNode.getAltNode();

    Assert.assertNull(collectionNode);
  }
  @Test
  public void testParseSimpleLinkTagWithoutDescription2() {
    WikiPageNode wikiPageNode = getWikiPageNode("link-3.creole");

    Assert.assertNotNull(wikiPageNode);

    ParagraphNode paragraphNode = (ParagraphNode) wikiPageNode.getChildASTNode(0);

    LineNode lineNode = (LineNode) paragraphNode.getChildASTNode(0);

    Assert.assertEquals(5, lineNode.getChildASTNodesCount());

    List<ASTNode> astNodes = lineNode.getChildASTNodes();

    for (ASTNode astNode : astNodes) {
      if (!(astNode instanceof LinkNode)) {
        continue;
      }

      LinkNode linkNode = (LinkNode) astNode;

      Assert.assertEquals("L", linkNode.getLink());

      CollectionNode collectionNode = linkNode.getAltCollectionNode();

      Assert.assertNotNull(collectionNode);
      Assert.assertEquals(1, collectionNode.size());

      List<ASTNode> collectionNodeASTNodes = collectionNode.getASTNodes();

      UnformattedTextNode unformattedTextNode = (UnformattedTextNode) collectionNodeASTNodes.get(0);

      collectionNode = (CollectionNode) unformattedTextNode.getChildASTNode(0);

      unformattedTextNode = (UnformattedTextNode) collectionNode.get(0);

      Assert.assertEquals("A", unformattedTextNode.getContent());
    }
  }
  @Test
  public void testParseSimpleTextParagraph() {
    WikiPageNode wikiPageNode = getWikiPageNode("text-1.creole");

    Assert.assertNotNull(wikiPageNode);
    Assert.assertEquals(1, wikiPageNode.getChildASTNodesCount());

    ParagraphNode paragraphNode = (ParagraphNode) wikiPageNode.getChildASTNode(0);

    List<ASTNode> astNodes = paragraphNode.getChildASTNodes();

    Assert.assertEquals(1, astNodes.size());

    LineNode lineNode = (LineNode) paragraphNode.getChildASTNode(0);

    Assert.assertEquals(1, lineNode.getChildASTNodesCount());

    UnformattedTextNode unformattedTextNode = (UnformattedTextNode) lineNode.getChildASTNode(0);

    unformattedTextNode = (UnformattedTextNode) unformattedTextNode.getChildASTNode(0);

    Assert.assertEquals("Simple paragraph", unformattedTextNode.getContent());
  }
  @Test
  public void testParseSimpleTextWithItalics() {
    WikiPageNode wikiPageNode = getWikiPageNode("text-3.creole");

    Assert.assertNotNull(wikiPageNode);

    List<ASTNode> astNodes = wikiPageNode.getChildASTNodes();

    Assert.assertEquals(1, astNodes.size());

    ParagraphNode paragraphNode = (ParagraphNode) astNodes.get(0);

    astNodes = paragraphNode.getChildASTNodes();

    Assert.assertEquals(1, astNodes.size());

    LineNode lineNode = (LineNode) paragraphNode.getChildASTNode(0);

    Assert.assertEquals(2, lineNode.getChildASTNodesCount());

    UnformattedTextNode unformattedTextNode = (UnformattedTextNode) lineNode.getChildASTNode(0);

    unformattedTextNode = (UnformattedTextNode) unformattedTextNode.getChildASTNode(0);

    Assert.assertEquals("Text with some content in ", unformattedTextNode.getContent());

    ItalicTextNode italicTextNode = (ItalicTextNode) lineNode.getChildASTNode(1);

    FormattedTextNode formattedTextNode = (FormattedTextNode) italicTextNode.getChildASTNode(0);

    CollectionNode collectionNode = (CollectionNode) formattedTextNode.getChildASTNode(0);

    unformattedTextNode = (UnformattedTextNode) collectionNode.get(0);

    Assert.assertEquals("italic", unformattedTextNode.getContent());
  }