package word.w2004;
import junit.framework.Assert;
import org.junit.Test;
import word.utils.TestUtils;
import word.w2004.elements.Paragraph;
import word.w2004.elements.ParagraphPiece;
import word.w2004.elements.Table;
import word.w2004.elements.tableElements.TableCol;
import word.w2004.elements.tableElements.TableDefinition;
import word.w2004.elements.tableElements.TableEle;
import word.w2004.elements.tableElements.TableFooter;
import word.w2004.style.ParagraphStyle.Align;
public class TableTest extends Assert {
@Test
// New table has to return ""
public void testCreateEmptyTable() {
Table tbl01 = new Table();
assertEquals("", tbl01.getContent());
}
// ### TH - Table Header ###
@Test
public void testTableWithArray() {
Table tbl = new Table();
String[] cols = { "aaa", "bbb" };
tbl.addTableEle(TableEle.TH, cols);
tableBasicCheckings(tbl.getContent());
assertTrue(tbl.getContent().contains("<w:tr ")); // TH
assertTrue(tbl.getContent().contains("<w:t>aaa</w:t>")); // TH
assertTrue(tbl.getContent().contains("<w:t>bbb</w:t>")); // TH
assertTrue(tbl.getContent().contains("</w:tr>"));// TH
assertTrue(tbl.getContent().contains("</w:tbl>"));
}
@Test /* It still has to render the table header and cell */
public void testCreateTableEmptyTH() {
Table tbl = new Table();
tbl.addTableEle(TableEle.TH, "");
tbl.addTableEle(TableEle.TD, "");
tableBasicCheckings(tbl.getContent());
assertEquals(1, TestUtils.regexCount(tbl.getContent(), "<w:r wsp:rsidRPr=\"004374EC\"> "));
assertEquals(2, TestUtils.regexCount(tbl.getContent(), "<w:t></w:t>"));
}
@Test
public void testTableHeaderNoRepeat() {
Table tbl = new Table();
tbl.addTableEle(TableEle.TH, "Name");
assertEquals(0, TestUtils.regexCount(tbl.getContent(), "[{]tblHeader[}]"));
}
@Test
public void testTableHeaderWITHRepeatHeader() {
Table tbl = new Table();
tbl.setRepeatTableHeaderOnEveryPage();
tbl.addTableEle(TableEle.TH, "Name");
tableBasicCheckings(tbl.getContent());
assertEquals(0, TestUtils.regexCount(tbl.getContent(), "[{]tblHeader[}]"));
assertEquals(2, TestUtils.regexCount(tbl.getContent(), "<*w:trPr>"));
assertEquals(1, TestUtils.regexCount(tbl.getContent(), "<w:tblHeader/>"));
}
@Test
public void testTableDefinition() {
TableDefinition tbldef = new TableDefinition();
assertEquals(1, TestUtils.regexCount(tbldef.getTop(), "<*w:tbl>"));
assertEquals(2, TestUtils.regexCount(tbldef.getTop(), "<*w:tblPr>"));
assertNull(tbldef.getMiddle());
assertEquals(1, TestUtils.regexCount(tbldef.getBottom(), "</w:tbl>"));
}
@Test
public void testTableCol() {
TableCol tblcol = new TableCol();
assertEquals(1, TestUtils.regexCount(tblcol.getTop(), "<*w:tr"));
assertEquals(2, TestUtils.regexCount(tblcol.getMiddle(), "<*w:tc>"));
assertEquals(1, TestUtils.regexCount(tblcol.getMiddle(),
"<w:t>[{]value[}]</w:t>")); // test placeholder
assertEquals(1, TestUtils.regexCount(tblcol.getBottom(), "</w:tr>"));
}
@Test
public void testTableFooter() {
TableFooter tblFooter = new TableFooter();
assertEquals(1, TestUtils.regexCount(tblFooter.getTop(), "<*w:tr"));
assertEquals(2, TestUtils.regexCount(tblFooter.getMiddle(), "<*w:tc>"));
// In this framework, footer has to be bold...
assertEquals(1, TestUtils.regexCount(tblFooter.getMiddle(), "<w:b/>"));
assertEquals(1, TestUtils.regexCount(tblFooter.getMiddle(),
"<w:t>[{]value[}]</w:t>")); // test placeholder
assertEquals(1, TestUtils.regexCount(tblFooter.getBottom(), "</w:tr>"));
}
@Test
public void testEmpty() {
Table tbl = new Table();
String[] arr = {};
tbl.addTableEle(TableEle.TABLE_DEF, arr);
assertEquals("", tbl.getContent());
}
// ### Full Table!!! ###
@Test
public void testCreateFullTable() {
Table tbl = new Table();
tbl.addTableEle(TableEle.TH, "Name", "Salary");
tbl.addTableEle(TableEle.TD, "Leonardo", "100,000.00");
tbl.addTableEle(TableEle.TD, "Romario", "1,000,000.00");
tbl.addTableEle(TableEle.TF, "Total", "1,100,000.00");
tableBasicCheckings(tbl.getContent());
assertEquals(4, TestUtils.regexCount(tbl.getContent(), "<w:tr"));
assertEquals(4, TestUtils.regexCount(tbl.getContent(), "</w:tr>"));
assertEquals(1,
TestUtils.regexCount(tbl.getContent(), "<w:t>Name</w:t>"));
assertEquals(1,
TestUtils.regexCount(tbl.getContent(), "<w:t>Salary</w:t>"));
assertEquals(1,
TestUtils.regexCount(tbl.getContent(), "<w:t>Leonardo</w:t>"));
assertEquals(1,
TestUtils.regexCount(tbl.getContent(), "<w:t>100,000.00</w:t>"));
assertEquals(1,
TestUtils.regexCount(tbl.getContent(), "<w:t>Romario</w:t>"));
assertEquals(1, TestUtils.regexCount(tbl.getContent(),
"<w:t>1,000,000.00</w:t>"));
assertEquals(1,
TestUtils.regexCount(tbl.getContent(), "<w:t>Total</w:t>"));
assertEquals(1, TestUtils.regexCount(tbl.getContent(),
"<w:t>1,100,000.00</w:t>"));
assertEquals(1, TestUtils.regexCount(tbl.getContent(), "</w:tbl>"));
assertEquals(tbl.getContent(), tbl.getContent());
}
@Test
public void testCreateEmptyCell() {
Table tbl = new Table();
tbl.addTableEle(TableEle.TD, "Leonardo", "");
assertEquals(1,
TestUtils.regexCount(tbl.getContent(), "<w:t>Leonardo</w:t>"));
assertEquals(1, TestUtils.regexCount(tbl.getContent(), "<w:t></w:t> "));
}
@Test
public void testParagraphSanity() {
Table tbl = new Table();
tbl.addTableEle(TableEle.TD, Paragraph.with("Flamengo").create());
tableBasicCheckings(tbl.getContent());
assertEquals(1, TestUtils.regexCount(tbl.getContent(), "<w:t>Flamengo</w:t>"));
}
@Test
public void testEmptyParagraph() {
Table tbl = new Table();
tbl.addTableEle(TableEle.TD, Paragraph.with("").create());
tableBasicCheckings(tbl.getContent());
assertEquals(1, TestUtils.regexCount(tbl.getContent(), "<w:tr"));
assertEquals(1, TestUtils.regexCount(tbl.getContent(), "</w:tr>"));
assertEquals(1, TestUtils.regexCount(tbl.getContent(), "<w:t></w:t> "));
}
@Test
public void testParagraphStyle() {
Table tbl = new Table();
Paragraph p1 = (Paragraph) Paragraph.withPieces(ParagraphPiece.with("Flamengo").withStyle().bold().italic().create()).withStyle().align(Align.RIGHT).create();
tbl.addTableEle(TableEle.TD, p1);
tableBasicCheckings(tbl.getContent());
assertEquals(1, TestUtils.regexCount(tbl.getContent(), "<w:b/>"));
assertEquals(1, TestUtils.regexCount(tbl.getContent(), "<w:i/>"));
assertEquals(1, TestUtils.regexCount(tbl.getContent(), "<w:jc w:val=\"right\"/>"));
assertEquals(1, TestUtils.regexCount(tbl.getContent(), "<w:t>Flamengo</w:t>"));
}
private void tableBasicCheckings(String content) {
assertEquals(1, TestUtils.regexCount(content, "<w:tbl>"));
assertEquals(1, TestUtils.regexCount(content, "</w:tbl>"));
assertEquals(2, TestUtils.regexCount(content, "<*w:tblGrid>"));
assertEquals(1, TestUtils.regexCount(content, "<w:tblPr>"));
assertEquals(1, TestUtils.regexCount(content, "</w:tblPr>"));
}
}