/*
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.xwiki.rendering.wikimodel.util;
import junit.framework.TestCase;
/**
* @version $Id: 92a0b6dac4eb2cb9c732598f9876abfa0ad4f41b $
* @since 4.0M1
*/
public class SectionBuilderTest extends TestCase
{
protected static class PrintListener implements ISectionListener<String>
{
final StringBuffer fBuf = new StringBuffer();
public void beginDocument(IPos<String> pos)
{
fBuf.append("<doc" + n(pos) + ">");
}
public void beginSection(IPos<String> pos)
{
fBuf.append("<s" + n(pos) + ">");
}
public void beginSectionContent(IPos<String> pos)
{
fBuf.append("<c" + n(pos) + ">");
}
public void beginSectionHeader(IPos<String> pos)
{
fBuf.append("<h" + n(pos) + ">");
}
public void endDocument(IPos<String> pos)
{
fBuf.append("</doc" + n(pos) + ">");
}
public void endSection(IPos<String> pos)
{
fBuf.append("</s" + n(pos) + ">");
}
public void endSectionContent(IPos<String> pos)
{
fBuf.append("</c" + n(pos) + ">");
}
public void endSectionHeader(IPos<String> pos)
{
fBuf.append("</h" + n(pos) + ">");
}
private String n(IPos<String> pos)
{
return "[" + pos.getData() + "]" + "-" + pos.getDocumentLevel()
+ "-" + pos.getHeaderLevel();
}
@Override
public String toString()
{
return fBuf.toString();
}
}
SectionBuilder<String> fBuilder;
private PrintListener fListener;
/**
* @param name
*/
public SectionBuilderTest(String name)
{
super(name);
}
private String check(String prev, String delta)
{
String test = fListener.toString();
assertEquals(prev + delta, test);
return test;
}
@Override
protected void setUp() throws Exception
{
fListener = new PrintListener();
fBuilder = new SectionBuilder<String>(fListener);
}
public void testDocumentLevels()
{
String prev = "";
fBuilder.beginDocument("X");
prev = check(prev, "<doc[X]-1-0>");
fBuilder.beginDocument("Y");
prev = check(prev, "<doc[Y]-2-0>");
fBuilder.endDocument();
prev = check(prev, "</doc[Y]-2-0>");
fBuilder.endDocument();
prev = check(prev, "</doc[X]-1-0>");
}
public void testHeaderLevels()
{
fBuilder.beginDocument("X");
String prev = "";
prev = check(prev, "<doc[X]-1-0>");
fBuilder.beginHeader(1, "A");
prev = check(prev, "<s[A]-1-1><h[A]-1-1>");
fBuilder.endHeader();
prev = check(prev, "</h[A]-1-1><c[A]-1-1>");
fBuilder.beginHeader(3, "B");
prev = check(prev, "<s[B]-1-2><c[B]-1-2><s[B]-1-3><h[B]-1-3>");
fBuilder.endHeader();
prev = check(prev, "</h[B]-1-3><c[B]-1-3>");
fBuilder.beginHeader(3, "C");
prev = check(prev, "</c[B]-1-3></s[B]-1-3><s[C]-1-3><h[C]-1-3>");
fBuilder.endHeader();
prev = check(prev, "</h[C]-1-3><c[C]-1-3>");
fBuilder.beginHeader(2, "D");
prev = check(prev,
"</c[C]-1-3></s[C]-1-3></c[B]-1-2></s[B]-1-2><s[D]-1-2><h[D]-1-2>");
fBuilder.endHeader();
prev = check(prev, "</h[D]-1-2><c[D]-1-2>");
fBuilder.beginHeader(3, "E");
prev = check(prev, "<s[E]-1-3><h[E]-1-3>");
fBuilder.endHeader();
prev = check(prev, "</h[E]-1-3><c[E]-1-3>");
fBuilder.endDocument();
prev = check(prev, "</c[E]-1-3></s[E]-1-3>" + "</c[D]-1-2></s[D]-1-2>"
+ "</c[A]-1-1></s[A]-1-1>" + "</doc[X]-1-0>");
}
public void testWithoutLevels()
{
fBuilder.beginDocument("X");
String prev = "";
prev = check(prev, "<doc[X]-1-0>");
fBuilder.beginHeader(1, "A");
prev = check(prev, "<s[A]-1-1><h[A]-1-1>");
fBuilder.endHeader();
prev = check(prev, "</h[A]-1-1><c[A]-1-1>");
fBuilder.beginHeader(3, "B");
prev = check(prev, "<s[B]-1-2><c[B]-1-2><s[B]-1-3><h[B]-1-3>");
fBuilder.endHeader();
prev = check(prev, "</h[B]-1-3><c[B]-1-3>");
fBuilder.beginHeader(3, "C");
prev = check(prev, "</c[B]-1-3></s[B]-1-3><s[C]-1-3><h[C]-1-3>");
fBuilder.endHeader();
prev = check(prev, "</h[C]-1-3><c[C]-1-3>");
fBuilder.beginHeader(2, "D");
prev = check(prev,
"</c[C]-1-3></s[C]-1-3></c[B]-1-2></s[B]-1-2><s[D]-1-2><h[D]-1-2>");
fBuilder.endHeader();
prev = check(prev, "</h[D]-1-2><c[D]-1-2>");
fBuilder.beginHeader(3, "E");
prev = check(prev, "<s[E]-1-3><h[E]-1-3>");
fBuilder.endHeader();
prev = check(prev, "</h[E]-1-3><c[E]-1-3>");
fBuilder.endDocument();
prev = check(prev, "</c[E]-1-3></s[E]-1-3>" + "</c[D]-1-2></s[D]-1-2>"
+ "</c[A]-1-1></s[A]-1-1>" + "</doc[X]-1-0>");
}
public void testInSubDocument()
{
String prev = "";
fBuilder.beginDocument("X");
prev = check(prev, "<doc[X]-1-0>");
fBuilder.beginHeader(1, "A");
prev = check(prev, "<s[A]-1-1><h[A]-1-1>");
fBuilder.endHeader();
prev = check(prev, "</h[A]-1-1><c[A]-1-1>");
// BEGIN DOCUMENT Y [
fBuilder.beginDocument("Y");
prev = check(prev, "<doc[Y]-2-0>");
fBuilder.beginHeader(1, "YA");
prev = check(prev, "<s[YA]-2-1><h[YA]-2-1>");
fBuilder.endHeader();
prev = check(prev, "</h[YA]-2-1><c[YA]-2-1>");
fBuilder.endDocument();
prev = check(prev, "</c[YA]-2-1></s[YA]-2-1></doc[Y]-2-0>");
// ] END DOCUMENT Y
fBuilder.beginHeader(2, "B");
prev = check(prev, "<s[B]-1-2><h[B]-1-2>");
fBuilder.endHeader();
prev = check(prev, "</h[B]-1-2><c[B]-1-2>");
fBuilder.endDocument();
prev = check(prev, "</c[B]-1-2></s[B]-1-2>" + "</c[A]-1-1></s[A]-1-1>"
+ "</doc[X]-1-0>");
}
}