/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.karaf.shell.tabletest;
import java.io.PrintStream;
import java.io.StringWriter;
import junit.framework.Assert;
import org.apache.commons.io.output.WriterOutputStream;
import org.apache.karaf.shell.table.Col;
import org.apache.karaf.shell.table.Row;
import org.apache.karaf.shell.table.ShellTable;
import org.junit.Test;
public class ShellTableTest {
@Test
public void testTable() {
ShellTable table = new ShellTable();
table.column(new Col("id").alignRight().maxSize(5));
table.column(new Col("Name").maxSize(20));
table.column(new Col("Centered").alignCenter());
table.addRow().addContent(1, "Test", "Description");
table.addRow().addContent(20, "My name", "Description");
Row row = table.addRow();
row.addContent(123456789);
row.addContent("A very long text that should be cut");
row.addContent("A very long text that should not be cut");
StringWriter writer = new StringWriter();
PrintStream out = new PrintStream(new WriterOutputStream(writer));
table.print(out, true);
out.flush();
String expected =
" id | Name | Centered \n" +
"----------------------------------------------------------------------\n" +
" 1 | Test | Description \n" +
" 20 | My name | Description \n" +
"12345 | A very long text tha | A very long text that should not be cut\n";
Assert.assertEquals(expected, getString(writer));
}
@Test
public void testGrow() {
ShellTable table = new ShellTable().size(10);
table.column(new Col("1"));
table.column(new Col("2"));
table.addRow().addContent("1", "2");
StringWriter writer = new StringWriter();
PrintStream out = new PrintStream(new WriterOutputStream(writer));
table.print(out, true);
out.flush();
String expected =
"1 | 2\n" +
"----------\n" +
"1 | 2\n";
Assert.assertEquals(expected, getString(writer));
}
@Test
public void testShrink() {
ShellTable table = new ShellTable().size(10);
table.column(new Col("1").maxSize(5));
table.column(new Col("2").alignRight());
table.addRow().addContent("quite long", "and here an even longer text");
StringWriter writer = new StringWriter();
PrintStream out = new PrintStream(new WriterOutputStream(writer));
table.print(out, true);
out.flush();
String expected = //
"1 | 2\n" //
+ "----------\n" //
+ "quite | a\n";
Assert.assertEquals(expected, getString(writer));
}
@Test
public void testTooSmall() {
ShellTable table = new ShellTable().size(2);
table.column(new Col("1").maxSize(5));
table.column(new Col("2").alignRight());
table.addRow().addContent("quite long", "and here an even longer text");
StringWriter writer = new StringWriter();
PrintStream out = new PrintStream(new WriterOutputStream(writer));
table.print(out, true);
out.flush();
String expected = //
"1 | \n" + //
"--------\n" + //
"quite | \n";
Assert.assertEquals(expected, getString(writer));
}
@Test
public void testNoFormat() {
ShellTable table = new ShellTable();
table.column(new Col("first"));
table.column(new Col("second"));
table.addRow().addContent("first column", "second column");
StringWriter writer = new StringWriter();
PrintStream out = new PrintStream(new WriterOutputStream(writer));
table.print(out, false);
out.flush();
String expected = "first column\tsecond column\n";
Assert.assertEquals(expected, getString(writer));
}
@Test
public void testNoFormatWithCustomSeparator() {
ShellTable table = new ShellTable();
table.separator(";");
table.column(new Col("first"));
table.column(new Col("second"));
table.addRow().addContent("first column", "second column");
StringWriter writer = new StringWriter();
PrintStream out = new PrintStream(new WriterOutputStream(writer));
table.print(out, false);
out.flush();
String expected = "first column;second column\n";
Assert.assertEquals(expected, getString(writer));
}
private String getString(StringWriter writer) {
return writer.getBuffer().toString().replace("\r\n", "\n");
}
}