Annotation Interface Table
In principle, every object can be represented as a table. However, JGiven treats certain types of objects in a special way.
If a parameter implements the Iterable
or is an instance of
an array then each element of the Iterable is interpreted as a single row of
the table. Otherwise JGiven will only create a single row.
The elements are again interpreted differently whether they are instances of
Iterable
or not.
If the elements are instances of Iterable then each element becomes a cell in
the row. Note that the first list is taken as the header of the table if the
columnTitles()
is not set.
If the elements are not instances of Iterable, the field names become the
headers and field values the data. This can be overridden by the
objectFormatting()
attribute.
It is also possible to completely replace the way JGiven translates arguments
to tables by using the formatter()
attribute
Example
Some POJO
{ @code class CoffeeWithPrice { String name; double price_in_EUR; CoffeeWithPrice(String name, double priceInEur) { this.name = name; this.price_in_EUR = priceInEur; } } }
The Step Method
public SELF the_prices_of_the_coffees_are( @Table CoffeeWithPrice... prices ) {
...
}
Invocation of the step method
given().the_prices_of_the_coffees_are(
new CoffeeWithPrice("Espresso", 2.0),
new CoffeeWithPrice("Cappuccino", 2.5));
Text Report
Given the prices of the coffees are
| name | price in EUR |
+------------+--------------+
| Espresso | 2.0 |
| Cappuccino | 2.5 |
- Since:
- 0.6.1
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic enum
static enum
Possible choices for theobjectFormatting()
attribute. -
Optional Element Summary
Modifier and TypeOptional ElementDescriptionString[]
Explicitly specifies column titles of table header.String[]
Specifies which fields should be excluded in the report.Specify an array ofNamedFormat
to use when formatting POJOs fields.Class<? extends Annotation>
Specify a customNamedFormats
annotationClass<? extends TableFormatterFactory>
The formatter to use to translate the parameter object to a table.Specifies the header type of the table.String[]
Specifies which fields should be included in the report.boolean
Whether or not columns with onlynull
values are shown or not.boolean
Automatically number the columns of a table Default is not to generate one.LikenumberedColumns()
but specifies a different header for the generated row.boolean
Automatically number the rows of the table Default is not to generate one.LikenumberedRows()
but specifies a different header for the generated column.How to format rows when the rows are plain Objects, i.e.Class<? extends RowFormatterFactory>
Specifies a factory to create a customRowFormatter
that is used to format POJOs each row of the table.boolean
Whether to transpose the resulting table in the report or not.
-
Element Details
-
header
Table.HeaderType headerSpecifies the header type of the table. Default isHORIZONTAL
.That is explained best by an example.
Given the following table argument:new Object[][] { { "a1", "a2", "a3" }, { "b1", "b2", "b3" }, { "c1", "c2", "c3" }}
This simply specifies the the table has no header. The plain text report will produce the following output.HeaderType.NONE
| a1 | a2 | a3 | | b1 | b2 | b3 | | c1 | c2 | c3 |
Specifies that the first row represents the header.HeaderType.HORIZONTAL
| a1 | a2 | a3 | +----+----+----+ | b1 | b2 | b3 | | c1 | c2 | c3 |
Specifies that the first column represents the header. Thus elements a1, b1, and c1. The plain text report will produce the same output as for header type NONE, however, the HTML report will render the first column as a header.HeaderType.VERTICAL
| a1 | a2 | a3 | | b1 | b2 | b3 | | c1 | c2 | c3 |
Specifies that the first row and the first column are headers. The plain text report will produce the same output as for header type HORIZONTAL, however, the HTML report will render the first row and the first column as headers.HeaderType.BOTH
| a1 | a2 | a3 | +----+----+----+ | b1 | b2 | b3 | | c1 | c2 | c3 |
Effect on POJO lists
When the data is given by a list of POJOs then setting the header type toVERTICAL
will also transpose the table. For exampleGiven the following POJO list.
new CoffeeWithPrice[] { new CoffeeWithPrice("Espresso", 2.0), new CoffeeWithPrice("Cappuccino", 2.5)}
VERTICAL
Then the report will present the following table| name | Espresso | Cappuccino | | price in EUR | 2.0 | 2.5 |
The header type
BOTH
cannot be applied to POJO lists- Returns:
- the header type of the table.
- Default:
- HORIZONTAL
-
transpose
boolean transposeWhether to transpose the resulting table in the report or not.Example
Given the following data.new Object[][] { { "a1", "a2", "a3" }, { "b1", "b2", "b3" }, { "c1", "c2", "c3" }}
true
Then the table in the report will look as follows:| a1 | b1 | c1 | +----+----+----+ | a2 | b2 | c2 | | a3 | b3 | c3 |
instead of| a1 | a2 | a3 | +----+----+----+ | b1 | b2 | b3 | | c1 | c2 | c3 |
- Default:
- false
-
excludeFields
String[] excludeFieldsSpecifies which fields should be excluded in the report.If
includeFields()
is set, then this attribute has no effectMakes only sense when supplying a list of POJOs or a single POJO.
- Default:
- {}
-
includeFields
String[] includeFieldsSpecifies which fields should be included in the report. All fields not in this list will be excluded.Makes only sense when supplying a list of POJOs or a single POJO.
- Default:
- {}
-
columnTitles
String[] columnTitlesExplicitly specifies column titles of table header.The first row of the data is not taken as the header row if this attribute is set.
When a list of POJOs is given as parameter then this overrides the default behavior of taking the field names as table headers.
Example
Given the following table argument:new Object[][] { { "a1", "a2", "a3" }, { "b1", "b2", "b3" }, { "c1", "c2", "c3" }}
columnTitles()
attribute is set as follows:columnTitles = { "t1", "t2", "t3" }
Then the resulting table will look as follows| t1 | t2 | t3 | +----+----+----+ | a1 | a2 | a3 | | b1 | b2 | b3 | | c1 | c2 | c3 |
- Since:
- 0.7.1
- Default:
- {}
-
includeNullColumns
boolean includeNullColumnsWhether or not columns with onlynull
values are shown or not. Default is to not show them.- Since:
- 0.7.1
- Default:
- false
-
numberedRows
boolean numberedRowsAutomatically number the rows of the table Default is not to generate one.If the table has a horizontal header, the generated column has header '#'. To use a different header use
numberedRowsHeader()
.- Since:
- 0.8.2
- Default:
- false
-
numberedRowsHeader
String numberedRowsHeaderLikenumberedRows()
but specifies a different header for the generated column. This implicitly sets totrue
.Note that in case the table has no horizontal header a will be thrown if this value is set.
- Since:
- 0.8.2
- Default:
- "MARKER FOR ABSENT VALUES IN ANNOTATIONS - JGIVEN INTERNAL DO NOT USE!"
-
numberedColumns
boolean numberedColumnsAutomatically number the columns of a table Default is not to generate one.If the table has a vertical header, the generated row has header '#'. To use a different header use
numberedColumnsHeader()
.- Since:
- 0.8.2
- Default:
- false
-
numberedColumnsHeader
String numberedColumnsHeaderLikenumberedColumns()
but specifies a different header for the generated row. This implicitly sets totrue
.Note that in case the table has no vertical header a will be thrown if this value is set.
- Since:
- 0.8.2
- Default:
- "MARKER FOR ABSENT VALUES IN ANNOTATIONS - JGIVEN INTERNAL DO NOT USE!"
-
formatter
Class<? extends TableFormatterFactory> formatterThe formatter to use to translate the parameter object to a table. If you only want to override how POJOs are formatted you should use theobjectFormatting()
orrowFormatter()
attribute.- Since:
- 0.10.0
- Default:
- com.tngtech.jgiven.format.table.DefaultTableFormatter.Factory.class
-
objectFormatting
Table.ObjectFormatting objectFormattingHow to format rows when the rows are plain Objects, i.e. no Iterables. Note that this setting is ignored if a differentrowFormatter()
is set. In addition, JGiven will automatically switch to theTable.ObjectFormatting.PLAIN
formatter when there is an additional formatting annotation besides the@Table
annotation.- Since:
- 0.10.0
- Default:
- FIELDS
-
rowFormatter
Class<? extends RowFormatterFactory> rowFormatterSpecifies a factory to create a customRowFormatter
that is used to format POJOs each row of the table.The default implementation evaluates the
objectFormatting()
attribute and creates a corresponding RowFormatter- Since:
- 0.10.0
- Default:
- com.tngtech.jgiven.format.table.DefaultRowFormatterFactory.class
-
fieldsFormatSetAnnotation
Class<? extends Annotation> fieldsFormatSetAnnotationSpecify a customNamedFormats
annotationThe
NamedFormat
defined in this set will be used when formatting POJOs fields.
- Default:
- java.lang.annotation.Annotation.class
-
fieldsFormat
NamedFormat[] fieldsFormatSpecify an array ofNamedFormat
to use when formatting POJOs fields.When a
NamedFormat.name()
matches a field name, field value is formatted using thisNamedFormat
.Note : when set, has precedence over
fieldsFormatSetAnnotation()
- Default:
- {}
-