/*
* Copyright (C) 2012 eXo Platform SAS.
*
* 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.crsh.text.ui;
import org.crsh.text.Color;
import static org.crsh.text.ui.Element.label;
import static org.crsh.text.ui.Element.row;
public class TableRendererTestCase extends AbstractRendererTestCase {
public void testSimple() throws Exception {
TableElement table = new TableElement();
table.withColumnLayout(Layout.flow());
table.
add(row().
add(label("a")).
add(label("b"))).
add(row().
add(label("c")).
add(label("d")));
assertRender(table, 2,
"ab",
"cd");
}
public void testHeterogeneous() throws Exception {
TableElement table = new TableElement(1, 2);
table.
add(row().
add(label("foo"))
).
add(row().
add(label("aa")).
add(label("bb"))
).
add(row().
add(label("cc")).
add(label("dd")).
add(label("ee"))
);
//
assertRender(table, 3,
"foo",
"abb",
"a ",
"cdd",
"c ");
}
public void testRenderWithoutBorder() throws Exception {
TableElement table = new TableElement();
RowElement row = new RowElement().add(new LabelElement("foo"), new LabelElement("bar"));
table.add(row);
//
assertEquals(6, table.renderer().getActualWidth());
assertEquals(2, table.renderer().getMinWidth());
//
table.withColumnLayout(Layout.flow());
//
assertRender(table, 11, "foobar ");
assertRender(table, 10, "foobar ");
assertRender(table, 9, "foobar ");
assertRender(table, 8, "foobar ");
assertRender(table, 7, "foobar ");
assertRender(table, 6, "foobar");
assertRender(table, 5, "fooba", " r ");
assertRender(table, 4, "foob", " a", " r");
assertRender(table, 3, "foo");
assertRender(table, 2, "fo", "o ");
assertRender(table, 1, "f", "o", "o");
assertRender(table, 0);
//
table.withColumnLayout(Layout.weighted(1, 1));
//
assertRender(table, 11, "foo bar ");
assertRender(table, 10, "foo bar ");
assertRender(table, 9, "foo bar ");
assertRender(table, 8, "foo bar ");
assertRender(table, 7, "foo bar");
assertRender(table, 6, "foobar");
assertRender(table, 5, "fooba", " r ");
assertRender(table, 4, "foba", "o r ");
assertRender(table, 3, "fob", "o a", " r");
assertRender(table, 2, "fb", "oa", "or");
assertRender(table, 0);
//
table.withColumnLayout(Layout.weighted(1, 2));
//
assertRender(table, 11, "foo bar ");
assertRender(table, 10, "foobar ");
assertRender(table, 9, "foobar ");
assertRender(table, 8, "foobar ");
assertRender(table, 7, "fobar ", "o ");
assertRender(table, 6, "fobar ", "o ");
assertRender(table, 5, "fobar", "o ");
assertRender(table, 4, "fbar", "o ", "o ");
assertRender(table, 3, "fba", "or ", "o ");
assertRender(table, 2, "fo", "o ");
assertRender(table, 1, "f", "o", "o");
assertRender(table, 0);
}
public void testRenderWithBorder() throws Exception {
TableElement table = new TableElement().border(BorderStyle.DASHED);
RowElement row = new RowElement().add(new LabelElement("foo"), new LabelElement("bar"));
table.add(row);
//
assertEquals(8, table.renderer().getActualWidth());
assertEquals(4, table.renderer().getMinWidth());
//
table.withColumnLayout(Layout.flow());
//
assertRender(table, 11, " ------ ", "|foobar| ", " ------ ");
assertRender(table, 10, " ------ ", "|foobar| ", " ------ ");
assertRender(table, 9, " ------ ", "|foobar| ", " ------ ");
assertRender(table, 8, " ------ ", "|foobar|", " ------ ");
assertRender(table, 7, " ----- ", "|fooba|", "| r |", " ----- ");
assertRender(table, 6, " ---- ", "|foob|", "| a|", "| r|", " ---- ");
assertRender(table, 5, " --- ", "|foo|", " --- ");
assertRender(table, 4, " -- ", "|fo|", "|o |", " -- ");
assertRender(table, 3, " - ", "|f|", "|o|", "|o|"," - ");
assertRender(table, 2);
assertRender(table, 1);
assertRender(table, 0);
//
table.withColumnLayout(Layout.weighted(1, 1));
//
assertRender(table, 11, " --------- ", "|foo bar |", " --------- ");
assertRender(table, 10, " -------- ", "|foo bar |", " -------- ");
assertRender(table, 9, " ------- ", "|foo bar|", " ------- ");
assertRender(table, 8, " ------ ", "|foobar|", " ------ ");
assertRender(table, 7, " ----- ", "|fooba|", "| r |", " ----- ");
assertRender(table, 6, " ---- ", "|foba|", "|o r |", " ---- ");
assertRender(table, 5, " --- ", "|fob|", "|o a|", "| r|", " --- ");
assertRender(table, 4, " -- ", "|fb|", "|oa|", "|or|", " -- ");
assertRender(table, 3, " - ", "|f|", "|o|", "|o|", " - ");
assertRender(table, 2);
assertRender(table, 1);
assertRender(table, 0);
//
table.withColumnLayout(Layout.weighted(1, 2));
//
assertRender(table, 11, " --------- ", "|foobar |", " --------- ");
assertRender(table, 10, " -------- ", "|foobar |", " -------- ");
assertRender(table, 9, " ------- ", "|fobar |", "|o |", " ------- ");
assertRender(table, 8, " ------ ", "|fobar |", "|o |", " ------ ");
assertRender(table, 7, " ----- ", "|fobar|", "|o |", " ----- ");
assertRender(table, 6, " ---- ", "|fbar|", "|o |", "|o |", " ---- ");
assertRender(table, 5, " --- ", "|fba|", "|or |", "|o |", " --- ");
assertRender(table, 4, " -- ", "|fo|", "|o |", " -- ");
assertRender(table, 3, " - ", "|f|", "|o|", "|o|", " - ");
assertRender(table, 2);
assertRender(table, 1);
assertRender(table, 0);
}
public void testRenderWithOverflowHidden() throws Exception {
TableElement table = new TableElement().border(BorderStyle.DASHED).overflow(Overflow.HIDDEN);
RowElement row = new RowElement().add(new LabelElement("foo"), new LabelElement("bar"));
table.add(row);
//
table.withColumnLayout(Layout.flow());
//
assertRender(table, 11, " ------ ", "|foobar| ", " ------ ");
assertRender(table, 10, " ------ ", "|foobar| ", " ------ ");
assertRender(table, 9, " ------ ", "|foobar| ", " ------ ");
assertRender(table, 8, " ------ ", "|foobar|", " ------ ");
assertRender(table, 7, " ----- ", "|fooba|", " ----- ");
assertRender(table, 6, " ---- ", "|foob|", " ---- ");
assertRender(table, 5, " --- ", "|foo|", " --- ");
assertRender(table, 4, " -- ", "|fo|", " -- ");
assertRender(table, 3, " - ", "|f|"," - ");
assertRender(table, 2);
assertRender(table, 1);
assertRender(table, 0);
//
table.withColumnLayout(Layout.weighted(1, 1));
//
assertRender(table, 11, " --------- ", "|foo bar |", " --------- ");
assertRender(table, 10, " -------- ", "|foo bar |", " -------- ");
assertRender(table, 9, " ------- ", "|foo bar|", " ------- ");
assertRender(table, 8, " ------ ", "|foobar|", " ------ ");
assertRender(table, 7, " ----- ", "|fooba|", " ----- ");
assertRender(table, 6, " ---- ", "|foba|", " ---- ");
assertRender(table, 5, " --- ", "|fob|", " --- ");
assertRender(table, 4, " -- ", "|fb|", " -- ");
assertRender(table, 3, " - ", "|f|", " - ");
assertRender(table, 2);
assertRender(table, 1);
assertRender(table, 0);
//
table.withColumnLayout(Layout.weighted(1, 2));
//
assertRender(table, 11, " --------- ", "|foobar |", " --------- ");
assertRender(table, 10, " -------- ", "|foobar |", " -------- ");
assertRender(table, 9, " ------- ", "|fobar |", " ------- ");
assertRender(table, 8, " ------ ", "|fobar |", " ------ ");
assertRender(table, 7, " ----- ", "|fobar|", " ----- ");
assertRender(table, 6, " ---- ", "|fbar|", " ---- ");
assertRender(table, 5, " --- ", "|fba|", " --- ");
assertRender(table, 4, " -- ", "|fo|", " -- ");
assertRender(table, 3, " - ", "|f|", " - ");
assertRender(table, 2);
assertRender(table, 1);
assertRender(table, 0);
}
public void testRenderWithBorderAndSeparator() throws Exception {
TableElement table = new TableElement().border(BorderStyle.DASHED).separator(BorderStyle.DASHED);
RowElement row = new RowElement().add(new LabelElement("foo"), new LabelElement("bar"));
table.add(row);
//
assertEquals(9, table.renderer().getActualWidth());
assertEquals(5, table.renderer().getMinWidth());
//
table.withColumnLayout(Layout.flow());
//
assertRender(table, 11, " ------- ", "|foo|bar| ", " ------- ");
assertRender(table, 10, " ------- ", "|foo|bar| ", " ------- ");
assertRender(table, 9, " ------- ", "|foo|bar|", " ------- ");
assertRender(table, 8, " ------ ", "|foo|ba|", "| |r |", " ------ ");
assertRender(table, 7, " ----- ", "|foo|b|", "| |a|", "| |r|"," ----- ");
assertRender(table, 6, " --- ", "|foo| ", " --- ");
assertRender(table, 5, " --- ", "|foo|", " --- ");
assertRender(table, 4, " -- ", "|fo|", "|o |", " -- ");
assertRender(table, 3, " - ", "|f|", "|o|", "|o|"," - ");
assertRender(table, 2);
assertRender(table, 1);
assertRender(table, 0);
//
table.withColumnLayout(Layout.weighted(1, 1));
//
assertRender(table, 11, " --------- ", "|foo |bar |", " --------- ");
assertRender(table, 10, " -------- ", "|foo |bar|", " -------- ");
assertRender(table, 9, " ------- ", "|foo|bar|", " ------- ");
assertRender(table, 8, " ------ ", "|foo|ba|", "| |r |", " ------ ");
assertRender(table, 7, " ----- ", "|fo|ba|", "|o |r |", " ----- ");
assertRender(table, 6, " ---- ", "|fo|b|", "|o |a|", "| |r|", " ---- ");
assertRender(table, 5, " --- ", "|f|b|", "|o|a|", "|o|r|", " --- ");
assertRender(table, 4, " -- ", "|fo|", "|o |", " -- ");
assertRender(table, 3, " - ", "|f|", "|o|", "|o|", " - ");
assertRender(table, 2);
assertRender(table, 1);
assertRender(table, 0);
//
table.withColumnLayout(Layout.weighted(1, 2));
//
assertRender(table, 11, " --------- ", "|foo|bar |", " --------- ");
assertRender(table, 10, " -------- ", "|fo|bar |", "|o | |", " -------- ");
assertRender(table, 9, " ------- ", "|fo|bar |", "|o | |", " ------- ");
assertRender(table, 8, " ------ ", "|fo|bar|", "|o | |", " ------ ");
assertRender(table, 7, " ----- ", "|f|bar|", "|o| |", "|o| |", " ----- ");
assertRender(table, 6, " ---- ", "|f|ba|", "|o|r |", "|o| |", " ---- ");
assertRender(table, 5, " --- ", "|foo|", " --- ");
assertRender(table, 4, " -- ", "|fo|", "|o |", " -- ");
assertRender(table, 3, " - ", "|f|", "|o|", "|o|", " - ");
assertRender(table, 2);
assertRender(table, 1);
assertRender(table, 0);
}
public void testCosmetic() throws Exception {
TableElement table = new TableElement();
table.withColumnLayout(Layout.flow());
RowElement row = new RowElement().add(new LabelElement("foo", 5), new LabelElement("This text is larger to be displayed in a cell of 32", 5));
table.add(row);
assertRender(table, 32,
"fooThis text is larger to be dis",
" played in a cell of 32 ");
}
public void testCosmeticWithBorder() throws Exception {
TableElement table = new TableElement();
table.withColumnLayout(Layout.flow());
RowElement row = new RowElement().add(new LabelElement("foo", 5), new LabelElement("This text is larger to be displayed in a cell of 32", 5));
table.separator(BorderStyle.DASHED);
table.border(BorderStyle.DASHED);
table.add(row);
assertRender(table, 32,
" ------------------------------ ",
"|foo|This text is larger to be |",
"| |displayed in a cell of 32 |",
" ------------------------------ ");
}
public void testBorderStyle() throws Exception {
TableElement table = new TableElement();
table.withColumnLayout(Layout.flow());
table.border(BorderStyle.DASHED);
table.
add(row().style(Color.blue.fg().bg(Color.green).bold()).
add(label("a")).
add(label("b"))).
add(row().
add(label("c").style(Color.blue.fg().bg(Color.green).bold())).
add(label("d")));
/*
ChunkBuffer reader = new ChunkBuffer();
ShellFormatter writer = new ShellFormatter(reader, "_");
tableElement.print(writer, new TestInvocationContext());
String expected =
" --------------- _|" +
"\u001B[1;34;42m a \u001B[0m|\u001B[1;34;42m b \u001B[0m|_" +
"|\u001B[1;34;42m c \u001B[0m| \u001B[0md \u001B[0m|_" +
" --------------- _";
StringBuilder sb = new StringBuilder();
reader.writeAnsiTo(sb);
String ansi = sb.toString();
//
assertEquals(
expected
, ansi);
*/
}
public void testCellPadding() {
TableElement table = new TableElement().leftCellPadding(1).rightCellPadding(2);
table.add(new RowElement().add(new LabelElement("foo"), new LabelElement("bar")));
//
assertEquals(12, table.renderer().getActualWidth());
assertEquals(8, table.renderer().getMinWidth());
//
assertRender(table, 12, " foo bar ");
assertRender(table, 11, " foo ba ", " r ");
assertRender(table, 10, " foo b ", " a ", " r ");
assertRender(table, 9, " foo ");
assertRender(table, 8, " foo ");
assertRender(table, 7, " foo ");
assertRender(table, 6, " foo ");
assertRender(table, 5, " fo ", " o ");
assertRender(table, 4, " f ", " o ", " o ");
// IT SHOULD BE NO RENDER
assertRender(table, 3);
}
public void testRowLayout() {
TableElement table = new TableElement();
table.add(new RowElement().add(new LabelElement("foo")));
table.add(new RowElement().add(new LabelElement("bar")));
//
assertRender(table, 3, 2, "foo", "bar");
assertRender(table, 3, 1, "foo");
assertRender(table, 2, 4, "fo", "o ", "ba", "r ");
assertRender(table, 2, 3, "fo", "o ", " ");
}
public void testRowLayoutWithHeader() {
TableElement table = new TableElement();
table.add(new RowElement(true).add(new LabelElement("foo")));
table.add(new RowElement().add(new LabelElement("bar")));
//
assertRender(table, 3, 3, "foo", "---", "bar");
assertRender(table, 3, 2, "foo", " ");
assertNoRender(table, 3, 1);
//
assertRender(table, 2, 5, "fo", "o ", "--", "ba", "r ");
assertRender(table, 2, 4, "fo", "o ", " ", " ");
assertRender(table, 2, 3, "fo", "o ", " ");
}
public void testRowLayoutWithBorder() {
TableElement table = new TableElement().border(BorderStyle.DASHED);
table.add(new RowElement().add(new LabelElement("foo")));
table.add(new RowElement().add(new LabelElement("bar")));
//
assertRender(table, 5, 4, " --- ", "|foo|", "|bar|", " --- ");
assertRender(table, 5, 3, " --- ", "|foo|", " --- ");
assertNoRender(table, 5, 2);
//
assertRender(table, 4, 6, " -- ", "|fo|", "|o |", "|ba|", "|r |", " -- ");
assertRender(table, 4, 5, " -- ", "|fo|", "|o |", "| |", " -- ");
assertRender(table, 4, 4, " -- ", "|fo|", "|o |", " -- ");
}
public void testRowLayoutWithHeaderBorder() {
TableElement table = new TableElement().border(BorderStyle.DASHED);
table.add(new RowElement(true).add(new LabelElement("foo")));
table.add(new RowElement().add(new LabelElement("bar")));
//
assertRender(table, 5, 5, " --- ", "|foo|", " --- ", "|bar|", " --- ");
assertRender(table, 5, 4, " --- ", "|foo|", "| |", " --- ");
assertNoRender(table, 5, 3);
//
assertRender(table, 4, 7, " -- ", "|fo|", "|o |", " -- ", "|ba|", "|r |", " -- ");
assertRender(table, 4, 6, " -- ", "|fo|", "|o |", "| |", "| |", " -- ");
assertRender(table, 4, 5, " -- ", "|fo|", "|o |", "| |", " -- ");
assertNoRender(table, 4, 4);
}
public void testRowLayoutWithOverflowHidden() {
TableElement table = new TableElement().border(BorderStyle.DASHED).overflow(Overflow.HIDDEN);
table.add(new RowElement(true).add(new LabelElement("foo")));
table.add(new RowElement().add(new LabelElement("bar")));
//
assertRender(table, 5, 5, " --- ", "|foo|", " --- ", "|bar|", " --- ");
assertRender(table, 5, 4, " --- ", "|foo|", "| |", " --- ");
assertNoRender(table, 5, 3);
//
assertRender(table, 4, 6, " -- ", "|fo|", " -- ", "|ba|", "| |", " -- ");
assertRender(table, 4, 5, " -- ", "|fo|", " -- ", "|ba|", " -- ");
assertRender(table, 4, 4, " -- ", "|fo|", "| |", " -- ");
assertNoRender(table, 4, 3); // It should work with better impl
}
public void testRowLayoutWithColumns() {
TableElement table = new TableElement().border(BorderStyle.DASHED).separator(BorderStyle.DASHED);
table.add(new RowElement().add(new LabelElement("foo"), new LabelElement("bar")));
//
assertRender(table, 9, 3, " ------- ", "|foo|bar|", " ------- ");
assertRender(table, 9, 4, " ------- ", "|foo|bar|", "| | |", " ------- ");
}
}