/*
* 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 groovy.lang.GroovyShell;
import org.crsh.AbstractTestCase;
import org.crsh.text.Color;
import org.crsh.text.Decoration;
import java.util.Arrays;
import java.util.List;
public class UIBuilderTestCase extends AbstractTestCase {
public UIBuilderTestCase() {
}
public UIBuilderTestCase(String name) {
super(name);
}
/*
public void testText()
{
GroovyShell shell = new GroovyShell();
MessageElement res = (MessageElement)shell.evaluate(
"import org.crsh.console.ConsoleBuilder;\n" +
"def builder = new ConsoleBuilder();\n" +
"return builder.message('some_text');\n"
);
assertEquals("some_text", res.getData());
}
*/
public void testEmptyTable() {
GroovyShell shell = new GroovyShell();
UIBuilder res = (UIBuilder)shell.evaluate(
"import org.crsh.text.ui.UIBuilder;\n" +
"def builder = new UIBuilder();\n" +
"return builder;\n"
);
assertEquals(0, res.getElements().size());
}
public void testNode() {
GroovyShell shell = new GroovyShell();
UIBuilder res = (UIBuilder)shell.evaluate(
"import org.crsh.text.ui.UIBuilder;\n" +
"def builder = new UIBuilder();\n" +
"builder.node { };\n" +
"return builder;\n"
);
assertEquals(1, res.getElements().size());
assertNull(((TreeElement)res.getElements().get(0)).getValue());
assertTrue(res.getElements().get(0) instanceof TreeElement);
assertEquals(0, ((TreeElement)res.getElements().get(0)).getSize());
}
public void testLabelledNode() {
GroovyShell shell = new GroovyShell();
UIBuilder res = (UIBuilder)shell.evaluate(
"import org.crsh.text.ui.UIBuilder;\n" +
"def builder = new UIBuilder();\n" +
"builder.node('foo') { };\n" +
"return builder;\n"
);
assertEquals(1, res.getElements().size());
assertTrue(res.getElements().get(0) instanceof TreeElement);
assertTrue(((TreeElement)res.getElements().get(0)).getValue() instanceof LabelElement);
assertEquals("foo", ((LabelElement)((TreeElement)res.getElements().get(0)).getValue()).getValue());
assertEquals(0, ((TreeElement)res.getElements().get(0)).getSize());
}
public void testLabel() {
GroovyShell shell = new GroovyShell();
UIBuilder res = (UIBuilder)shell.evaluate(
"import org.crsh.text.ui.UIBuilder;\n" +
"def builder = new UIBuilder();\n" +
"builder.label('foo');\n" +
"return builder;\n"
);
assertEquals(1, res.getElements().size());
assertTrue(res.getElements().get(0) instanceof LabelElement);
assertEquals("foo", ((LabelElement)res.getElements().get(0)).getValue());
}
/*
public void testTable1()
{
GroovyShell shell = new GroovyShell();
TableElement res = (TableElement)shell.evaluate(
"import org.crsh.console.ConsoleBuilder;\n" +
"def builder = new ConsoleBuilder();\n" +
"return builder.table {\n" +
"row()\n" +
"};\n"
);
assertEquals(1, res.getData().size());
Row row = res.getData().get(0);
assertEquals(Arrays.<String>asList(), row.getValues());
}
public void testTable2()
{
GroovyShell shell = new GroovyShell();
TableElement res = (TableElement)shell.evaluate(
"import org.crsh.console.ConsoleBuilder;\n" +
"def builder = new ConsoleBuilder();\n" +
"return builder.table {\n" +
"row(['foo','bar'])\n" +
"};\n"
);
assertEquals(1, res.getData().size());
Row row = res.getData().get(0);
assertEquals(Arrays.asList("foo", "bar"), row.getValues());
}
public void testTable3()
{
GroovyShell shell = new GroovyShell();
TableElement res = (TableElement)shell.evaluate(
"import org.crsh.console.ConsoleBuilder;\n" +
"def table = [['a','b'],['c','d']];\n" +
"def builder = new ConsoleBuilder();\n" +
"return builder.table {\n" +
"table.each { array -> \n" +
" row([array[0],array[1]])\n" +
"}\n" +
"};\n"
);
assertEquals(2, res.getData().size());
Row row0 = res.getData().get(0);
Row row1 = res.getData().get(1);
assertEquals(Arrays.asList("a", "b"), row0.getValues());
assertEquals(Arrays.asList("c", "d"), row1.getValues());
}
public void testTable4()
{
GroovyShell shell = new GroovyShell();
TableElement res = (TableElement)shell.evaluate(
"import org.crsh.console.ConsoleBuilder;\n" +
"def table = [['a','b'],['c','d']];\n" +
"def builder = new ConsoleBuilder();\n" +
"return builder.table {\n" +
" table.each { array -> \n" +
" row {" +
" array.each {" +
" value -> cell(value)" +
" }\n" +
" }\n" +
" }\n" +
"};\n"
);
assertEquals(2, res.getData().size());
Row row0 = res.getData().get(0);
Row row1 = res.getData().get(1);
assertEquals(Arrays.asList("a", "b"), row0.getValues());
assertEquals(Arrays.asList("c", "d"), row1.getValues());
}
public void testElements()
{
GroovyShell shell = new GroovyShell();
List<ConsoleElement> elements = (List<ConsoleElement>)shell.evaluate(
"import org.crsh.console.ConsoleBuilder;\n" +
"def builder = new ConsoleBuilder();\n" +
"builder.message('a');\n" +
"builder.message('b');\n" +
"return builder.elements;\n"
);
assertEquals(2, elements.size());
assertEquals("a", ((MessageElement)elements.get(0)).getData());
assertEquals("b", ((MessageElement)elements.get(1)).getData());
}
*/
public void testTable() {
GroovyShell shell = new GroovyShell();
UIBuilder res = (UIBuilder)shell.evaluate(
"import org.crsh.text.ui.UIBuilder;\n" +
"def builder = new UIBuilder();\n" +
"builder.table { };\n" +
"return builder;\n"
);
assertEquals(1, res.getElements().size());
assertTrue(res.getElements().get(0) instanceof TableElement);
assertEquals(0, ((TableElement)res.getElements().get(0)).getRows().size());
}
public void testEmptyRow() {
GroovyShell shell = new GroovyShell();
UIBuilder res = (UIBuilder)shell.evaluate(
"import org.crsh.text.ui.UIBuilder;\n" +
"def builder = new UIBuilder();\n" +
"builder.table {\n" +
"row { }\n" +
"};\n" +
"return builder;\n"
);
assertEquals(1, res.getElements().size());
assertTrue(res.getElements().get(0) instanceof TableElement);
assertEquals(1, ((TableElement)res.getElements().get(0)).getRows().size());
assertEquals(0, ((TableElement)res.getElements().get(0)).getRows().get(0).getSize());
}
public void testRow() {
GroovyShell shell = new GroovyShell();
UIBuilder res = (UIBuilder)shell.evaluate(
"import org.crsh.text.ui.UIBuilder;\n" +
"def builder = new UIBuilder();\n" +
"builder.table {\n" +
"row () {\n" +
"label(\"col1\"); label(\"col2\")\n" +
"}\n" +
"};\n" +
"return builder;\n"
);
assertEquals(1, res.getElements().size());
assertTrue(res.getElements().get(0) instanceof TableElement);
assertEquals(1, ((TableElement)res.getElements().get(0)).getRows().size());
assertEquals(2, ((TableElement)res.getElements().get(0)).getRows().get(0).getSize());
assertEquals("Label[col1]", ((TableElement)res.getElements().get(0)).getRows().get(0).getCol(0).toString());
assertEquals("Label[col2]", ((TableElement)res.getElements().get(0)).getRows().get(0).getCol(1).toString());
}
public void testRowStyleWithEnd() {
GroovyShell shell = new GroovyShell();
UIBuilder res = (UIBuilder)shell.evaluate(
"import org.crsh.text.ui.UIBuilder;\n" +
"import org.crsh.text.Color;\n" +
"import org.crsh.text.Style;\n" +
"def builder = new UIBuilder();\n" +
"builder.table {\n" +
"row (bold: true, foreground: red, background: green) {\n" +
"label(\"col1\"); label(\"col2\")\n" +
"}\n" +
"};\n" +
"return builder;\n"
);
assertEquals(1, res.getElements().size());
TableElement table = assertInstance(TableElement.class, res.getElements().get(0));
assertEquals(1, table.getRows().size());
assertEquals(2, table.getRows().get(0).getSize());
assertEquals(Decoration.bold.fg(Color.red).bg(Color.green), table.getRows().get(0).getStyle());
}
public void testTableCols() {
GroovyShell shell = new GroovyShell();
UIBuilder res = (UIBuilder)shell.evaluate(
"import org.crsh.text.ui.UIBuilder;\n" +
"def builder = new UIBuilder();\n" +
"builder.table(columns: [1,1]) {\n" +
"row {\n" +
"}\n" +
"};\n" +
"return builder;\n"
);
assertEquals(1, res.getElements().size());
TableElement table = assertInstance(TableElement.class, res.getElements().get(0));
Layout.Weighted layout = assertInstance(Layout.Weighted.class, table.getColumnLayout());
assertTrue(Arrays.equals(new int[]{1,1}, layout.getWeights()));
}
public void testTableBorderTrue() {
GroovyShell shell = new GroovyShell();
UIBuilder res = (UIBuilder)shell.evaluate(
"import org.crsh.text.ui.UIBuilder;\n" +
"def builder = new UIBuilder();\n" +
"builder.table(border: true) {\n" +
"row {\n" +
"}\n" +
"};\n" +
"return builder;\n"
);
assertEquals(1, res.getElements().size());
assertTrue(res.getElements().get(0) instanceof TableElement);
assertSame(BorderStyle.DASHED, ((TableElement)res.getElements().get(0)).border);
}
public void testTableBorderFalse() {
GroovyShell shell = new GroovyShell();
UIBuilder res = (UIBuilder)shell.evaluate(
"import org.crsh.text.ui.UIBuilder;\n" +
"def builder = new UIBuilder();\n" +
"builder.table(border: false) {\n" +
"row {\n" +
"}\n" +
"};\n" +
"return builder;\n"
);
assertEquals(1, res.getElements().size());
assertTrue(res.getElements().get(0) instanceof TableElement);
assertSame(null, ((TableElement)res.getElements().get(0)).border);
}
public void testTableBorderNull() {
GroovyShell shell = new GroovyShell();
UIBuilder res = (UIBuilder)shell.evaluate(
"import org.crsh.text.ui.UIBuilder;\n" +
"def builder = new UIBuilder();\n" +
"builder.table(border: null) {\n" +
"row {\n" +
"}\n" +
"};\n" +
"return builder;\n"
);
assertEquals(1, res.getElements().size());
assertTrue(res.getElements().get(0) instanceof TableElement);
assertSame(null, ((TableElement)res.getElements().get(0)).border);
}
public void testTableBorderDash() {
GroovyShell shell = new GroovyShell();
UIBuilder res = (UIBuilder)shell.evaluate(
"import org.crsh.text.ui.UIBuilder;\n" +
"def builder = new UIBuilder();\n" +
"builder.table(border:org.crsh.text.ui.BorderStyle.DASHED) {\n" +
"row {\n" +
"}\n" +
"};\n" +
"return builder;\n"
);
assertEquals(1, res.getElements().size());
assertTrue(res.getElements().get(0) instanceof TableElement);
assertSame(BorderStyle.DASHED, ((TableElement)res.getElements().get(0)).border);
}
public void testTableBorderStar() {
GroovyShell shell = new GroovyShell();
UIBuilder res = (UIBuilder)shell.evaluate(
"import org.crsh.text.ui.UIBuilder\n" +
"def builder = new UIBuilder();\n" +
"builder.table(border: org.crsh.text.ui.BorderStyle.STAR) {\n" +
"row {\n" +
"}\n" +
"};\n" +
"return builder;\n"
);
assertEquals(1, res.getElements().size());
assertTrue(res.getElements().get(0) instanceof TableElement);
assertSame(BorderStyle.STAR, ((TableElement)res.getElements().get(0)).border);
}
public void testTableHeader() {
GroovyShell shell = new GroovyShell();
UIBuilder res = (UIBuilder)shell.evaluate(
"import org.crsh.text.ui.UIBuilder;\n" +
"def builder = new UIBuilder();\n" +
"builder.table {\n" +
"header () {\n" +
"}\n" +
"};\n" +
"return builder;\n"
);
assertEquals(1, res.getElements().size());
assertTrue(res.getElements().get(0) instanceof TableElement);
assertEquals(1, ((TableElement)res.getElements().get(0)).getRows().size());
assertEquals(true, ((TableElement)res.getElements().get(0)).getRows().get(0).header);
}
public void testForbiddenChild() throws Exception {
GroovyShell shell = new GroovyShell();
try {
shell.evaluate(
"import org.crsh.text.ui.UIBuilder;\n" +
"import org.crsh.text.Color;\n" +
"import org.crsh.text.Style;\n" +
"def builder = new UIBuilder();\n" +
"builder.table {\n" +
"row() {\n" +
"node()\n" +
"}\n" +
"};\n" +
"return builder;\n"
);
fail();
} catch (IllegalArgumentException iae) {
assertEquals("A table cannot contain a tree element", iae.getMessage());
}
}
public void testEval() {
GroovyShell shell = new GroovyShell();
UIBuilder builder = (UIBuilder)shell.evaluate(
"import org.crsh.text.ui.UIBuilder;\n" +
"import org.crsh.text.Color;\n" +
"import org.crsh.text.Style;\n" +
"def builder = new UIBuilder();\n" +
"builder.table {\n" +
"row {\n" +
"eval {" +
" return 'HELLO';" +
"}\n" +
"}\n" +
"};\n" +
"return builder;\n"
);
//
List<Element> elements = builder.getElements();
assertEquals(1, elements.size());
TableElement table = assertInstance(TableElement.class, elements.get(0));
assertEquals(1, table.getRows().size());
RowElement row = table.getRows().get(0);
assertEquals(1, row.getSize());
EvalElement eval = assertInstance(EvalElement.class, row.getCol(0));
assertNotNull(eval.closure);
assertEquals("HELLO", eval.closure.call());
}
}