/*******************************************************************************
* Copyright (c) 2007, 2012 David Green and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* David Green - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.wikitext.core.parser.outline;
import org.eclipse.mylyn.wikitext.mediawiki.MediaWikiLanguage;
import org.eclipse.mylyn.wikitext.parser.outline.OutlineItem;
import org.eclipse.mylyn.wikitext.parser.outline.OutlineParser;
import org.eclipse.mylyn.wikitext.textile.TextileLanguage;
import junit.framework.TestCase;
/**
* @author David Green
*/
public class OutlineParserTest extends TestCase {
private OutlineParser outlineParser;
@Override
public void setUp() {
outlineParser = new OutlineParser(new TextileLanguage());
}
public void testSimple() {
OutlineItem outline = outlineParser.parse("h1. First Header\n\nh2. Second Header\n\nh1. Third Header\n");
assertEquals(2, outline.getChildren().size());
assertEquals(1, outline.getChildren().get(0).getChildren().size());
assertEquals(0, outline.getChildren().get(1).getChildren().size());
}
public void testNearestItem() {
String textile = "h1. First Header\n\nh2. Second Header\n\nh1. Third Header\n";
OutlineItem outline = outlineParser.parse(textile);
int idxOfH2 = textile.indexOf("h2. Second");
assertTrue(idxOfH2 != -1);
OutlineItem h2Item = outline.findNearestMatchingOffset(idxOfH2);
assertNotNull(h2Item);
assertSame(outline.getChildren().get(0), h2Item.getParent());
assertEquals(2, h2Item.getLevel());
OutlineItem h1Item = outline.findNearestMatchingOffset(idxOfH2 - 1);
assertNotNull(h1Item);
assertSame(outline.getChildren().get(0), h1Item);
assertEquals(1, h1Item.getLevel());
int secondIdxOfH1 = textile.indexOf("h1. Third");
OutlineItem secondH1Item = outline.findNearestMatchingOffset(secondIdxOfH1);
assertNotNull(secondH1Item);
assertSame(outline.getChildren().get(1), secondH1Item);
assertEquals(1, secondH1Item.getLevel());
OutlineItem h2Item2 = outline.findNearestMatchingOffset(secondIdxOfH1 - 1);
assertSame(h2Item, h2Item2);
}
public void testPrevious() {
String textile = "h1. First Header\n\nh2. Second Header\n\nh1. Third Header\n";
OutlineItem outline = outlineParser.parse(textile);
assertNull(outline.getPrevious());
assertSame(outline, outline.getChildren().get(0).getPrevious());
assertSame(outline.getChildren().get(0), outline.getChildren().get(1).getPrevious());
assertSame(outline.getChildren().get(0), outline.getChildren().get(0).getChildren().get(0).getPrevious());
}
public void testMoveChildren() {
String textile = "h1. First Header\n\nh2. Second Header\n\nh1. Third Header\n";
OutlineItem outline = outlineParser.parse(textile);
assertEquals(2, outline.getChildren().size());
OutlineItem outline2 = outlineParser.createRootItem();
outline2.moveChildren(outline);
assertEquals(0, outline.getChildren().size());
assertEquals(2, outline2.getChildren().size());
assertSame(outline2, outline2.getChildren().get(0).getParent());
assertSame(outline2, outline2.getChildren().get(1).getParent());
outline = outlineParser.parse(textile);
outline.moveChildren(outline2);
assertEquals(0, outline2.getChildren().size());
assertEquals(4, outline.getChildren().size());
assertSame(outline, outline.getChildren().get(0).getParent());
assertSame(outline, outline.getChildren().get(1).getParent());
assertSame(outline, outline.getChildren().get(2).getParent());
assertSame(outline, outline.getChildren().get(3).getParent());
}
public void testHeadersWithHtmlTags() {
// bug 374019
outlineParser = new OutlineParser(new MediaWikiLanguage());
OutlineItem outline = outlineParser.parse("= <span style=\"font-family:monospace\">Heading Text</span> =\n\n text");
assertEquals(1, outline.getChildren().size());
OutlineItem headingItem = outline.getChildren().get(0);
assertEquals("Heading_Text", headingItem.getId());
assertEquals("Heading Text", headingItem.getLabel());
}
}