/* * 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.*; public class TableElementTestCase extends AbstractRendererTestCase { public void testSimple() throws Exception { TableElement tableElement = new TableElement(); tableElement. add(row(). add(label("a")). add(label("b"))). add(row(). add(label("c")). add(label("d"))); assertRender(tableElement, 12, "ab ", "cd "); } public void testStyle() throws Exception { TableElement tableElement = new TableElement(); tableElement. add(row().style(Color.green.bg().fg(Color.blue).bold()). add(label("a")). add(label("b"))) .add(row(). add(label("c").style(Color.green.bg().fg(Color.blue).bold())). add(label("d"))); /* ChunkBuffer reader = new ChunkBuffer(); ShellFormatter writer = new ShellFormatter(reader, "_"); tableElement.print(writer, new TestInvocationContext()); String expected = "\u001B[1;34;42ma b \u001B[0m_\u001B[1;34;42mc \u001B[0md \u001B[0m_"; StringBuilder sb = new StringBuilder(); reader.writeAnsiTo(sb); String ansi = sb.toString(); // assertEquals( expected , ansi); */ } public void testInNode() throws Exception { TableElement tableElement = new TableElement(); tableElement. add(row(). add(label("a")). add(label("b"))). add(row(). add(label("c")). add(label("d"))); TreeElement node = new TreeElement(); node.addChild(label("foo")); node.addChild(tableElement); node.addChild(label("bar")); assertRender(node, 14, "+-foo ", "+-ab ", "| cd ", "+-bar "); } public void testInNodeBorder() throws Exception { TableElement tableElement = new TableElement(1, 1); tableElement.border(BorderStyle.DASHED); tableElement. add(row(). add(label("a")). add(label("b"))). add(row(). add(label("c")). add(label("d"))); TreeElement node = new TreeElement(); node.addChild(label("foo")); node.addChild(tableElement); node.addChild(label("bar")); assertRender(node, 32, "+-foo ", "+- ---------------------------- ", "| |a b |", "| |c d |", "| ---------------------------- ", "+-bar "); } public void testInNodeTooLarge() throws Exception { TableElement tableElement = new TableElement(); tableElement. add(row(). add(label("a")). add(label("b")). add(label("c is a very very very too long value"))). add(row(). add(label("d")). add(label("e")). add(label("f"))); TreeElement node = new TreeElement(); node.addChild(label("foo")); node.addChild(tableElement); node.addChild(label("bar")); assertRender(node, 24, "+-foo " , "+-abc is a very very ver" , "| y too long value " , "| def " , "+-bar "); } public void testInNodeTooLargeBorder() throws Exception { TableElement tableElement = new TableElement(); tableElement.border(BorderStyle.DASHED); tableElement.separator(BorderStyle.DASHED); tableElement. add(row(). add(label("a")). add(label("b")). add(label("c is a very very very too long value"))). add(row(). add(label("d")). add(label("e")). add(label("f"))); TreeElement node = new TreeElement(); node.addChild(label("foo")); node.addChild(tableElement); node.addChild(label("bar")); assertRender(node, 32, "+-foo ", "+- ---------------------------- ", "| |a|b|c is a very very very to|", "| | | |o long value |", "| |d|e|f |", "| ---------------------------- ", "+-bar "); } public void testInNodeHeader() throws Exception { TableElement tableElement = new TableElement().border(BorderStyle.DASHED); tableElement. add(row(). add(label("a")). add(label("b"))). add(row(). add(label("c")). add(label("d"))). add(header(). add(label("e")). add(label("f"))). add(row(). add(label("g")). add(label("h"))). add(row(). add(label("i")). add(label("j"))); TreeElement node = new TreeElement(); node.addChild(label("foo")); node.addChild(tableElement); node.addChild(label("bar")); assertRender(node, 32, "+-foo ", "+- -- ", "| |ab| ", "| |cd| ", "| -- ", "| |ef| ", "| -- ", "| |gh| ", "| |ij| ", "| -- ", "+-bar "); } public void testTooLarge() throws Exception { TableElement tableElement = new TableElement(); tableElement. add(row(). add(label("a")). add(label("This text is very ver very too large to be displayed in a cell of 32"))). add(row(). add(label("c")). add(label("d"))); assertRender(tableElement, 27, "aThis text is very ver very", " too large to be displayed", " in a cell of 32 ", "cd " ); } public void testSimpleBorder() throws Exception { TableElement tableElement = new TableElement(); tableElement. add(row(). add(label("a")). add(label("b"))). add(row(). add(label("c")). add(label("d"))); // tableElement.border(BorderStyle.DASHED); assertRender(tableElement, 32, " -- ", "|ab| ", "|cd| ", " -- "); // tableElement.border(BorderStyle.STAR); tableElement.separator(BorderStyle.STAR); assertRender(tableElement, 32, "***** ", "*a*b* ", "*c*d* ", "***** "); } public void testBorderHeaderTopBottom() throws Exception { TableElement tableElement = new TableElement(); tableElement.border(BorderStyle.DASHED); tableElement. add(header(). add(label("a")). add(label("b"))). add(row(). add(label("c")). add(label("d"))). add(row(). add(label("e")). add(label("f"))). add(header(). add(label("g")). add(label("h"))); assertRender(tableElement, 32, " -- ", "|ab| ", " -- ", "|cd| ", "|ef| ", " -- ", "|gh| ", " -- "); } public void testNoBorderHeaderTopBottom() throws Exception { TableElement tableElement = new TableElement(); tableElement.border(null); tableElement. add(header(). add(label("a")). add(label("b"))). add(row(). add(label("c")). add(label("d"))). add(row(). add(label("e")). add(label("f"))); assertRender(tableElement, 3, "ab ", "-- ", "cd ", "ef "); } public void testBorderHeaderMiddle() throws Exception { TableElement tableElement = new TableElement(); tableElement.border(BorderStyle.DASHED); tableElement. add(row(). add(label("a")). add(label("b"))). add(row(). add(label("c")). add(label("d"))). add(header(). add(label("e")). add(label("f"))). add(row(). add(label("g")). add(label("h"))). add(row(). add(label("i")). add(label("j"))); assertRender(tableElement, 32, " -- ", "|ab| ", "|cd| ", " -- ", "|ef| ", " -- ", "|gh| ", "|ij| ", " -- "); } public void testBorderHeaderTwoMiddle() throws Exception { TableElement tableElement = new TableElement(); tableElement.border(BorderStyle.DASHED); tableElement. add(row(). add(label("a")). add(label("b"))). add(row(). add(label("c")). add(label("d"))). add(header(). add(label("e")). add(label("f"))). add(header(). add(label("g")). add(label("h"))). add(row(). add(label("i")). add(label("j"))). add(row(). add(label("k")). add(label("l"))); assertRender(tableElement, 32, " -- ", "|ab| ", "|cd| ", " -- ", "|ef| ", " -- ", "|gh| ", " -- ", "|ij| ", "|kl| ", " -- "); } public void testTooLargeBorder() throws Exception { TableElement tableElement = new TableElement(); tableElement.border(BorderStyle.DASHED); tableElement.separator(BorderStyle.DASHED); tableElement. add(row(). add(label("a")). add(label("This text is very ver very too large to be displayed in a cell of 32"))). add(row(). add(label("c")). add(label("d"))); assertRender(tableElement, 32, " ------------------------------ ", "|a|This text is very ver very t|", "| |oo large to be displayed in |", "| |a cell of 32 |", "|c|d |", " ------------------------------ "); } public void testTooLargeBorderHeader() throws Exception { TableElement tableElement = new TableElement(); tableElement.border(BorderStyle.DASHED); tableElement.separator(BorderStyle.DASHED); tableElement. add(header(). add(label("a")). add(label("This text is very ver very too large to be displayed in a cell of 32"))). add(row(). add(label("c")). add(label("d"))); assertRender(tableElement, 32, " ------------------------------ ", "|a|This text is very ver very t|", "| |oo large to be displayed in |", "| |a cell of 32 |", " ------------------------------ ", "|c|d |", " ------------------------------ "); } public void testBorderStyle() throws Exception { TableElement tableElement = new TableElement(); tableElement.border(BorderStyle.DASHED); tableElement. add(row().style(Color.green.bg().fg(Color.blue).bold()). add(label("a")). add(label("b"))). add(row(). add(label("c").style(Color.green.bg().fg(Color.blue).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 testTooManyColumns() throws Exception { TableElement tableElement = new TableElement(); tableElement.separator(BorderStyle.DASHED); tableElement.border(BorderStyle.DASHED); tableElement. add(row(). add(label("a")). add(label("This text is very ver very too large to be displayed in a cell of 32")). add(label("b"))); assertRender(tableElement, 32, " ------------------------------ ", "|a|This text is very ver very t|", "| |oo large to be displayed in |", "| |a cell of 32 |", " ------------------------------ "); } }