/* * 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 org.crsh.text.Decoration; import org.crsh.text.LineReader; import org.crsh.text.LineRenderer; import org.crsh.text.RenderAppendable; import org.crsh.text.Style; import static org.crsh.text.ui.Element.label; import static org.crsh.text.ui.Element.row; public class RendererTestCase extends AbstractRendererTestCase { 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, 32, "+-foo ", "+-ab ", "| cd ", "+-bar " ); } public void testCascading() throws Exception { Element custom = new Element() { LabelElement foo = new LabelElement("foo"); LabelElement bar = new LabelElement("bar").style(Style.style(Decoration.bold_off)); LabelElement juu = new LabelElement("juu"); @Override public LineRenderer renderer() { return new LineRenderer() { @Override public int getActualWidth() { return 9; } @Override public int getMinWidth() { return 1; } @Override public int getActualHeight(int width) { throw new UnsupportedOperationException(); } @Override public int getMinHeight(int width) { throw new UnsupportedOperationException(); } @Override public LineReader reader(final int width) { return new LineReader() { boolean done = false; public boolean hasLine() { return !done; } public void renderLine(RenderAppendable to) throws IllegalStateException { if (done) { throw new IllegalStateException(); } foo.renderer().reader(3).renderLine(to); bar.renderer().reader(3).renderLine(to); juu.renderer().reader(3).renderLine(to); done = true; } }; } }; } }; TableElement table = new TableElement().style(Style.style(Decoration.bold)).add( row().style(Color.red.fg()).add(custom)); assertRender(table, 32, "\033[1;31mfoo\033[22mbar\033[1mjuu\033[0m "); } public void testStyleOff() { TableElement table = new TableElement(). border(BorderStyle.DASHED). separator(BorderStyle.DASHED). style(Style.style(Decoration.bold)). add( row().style(Style.style(Decoration.underline)).add(label("foo"), label("bar"))); assertRender(table, 32, " ------- ", "|\033[1;4mfoo\033[0m|\033[1;4mbar\033[0m| ", " ------- "); } public void testNullLabelInTable() { TableElement tableElement = new TableElement(); tableElement.add(new RowElement().add(new LabelElement("a\nb"))); assertNoRender(tableElement, 1, 1); } }