The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

use strict;
BEGIN { use_ok 'Text::MarkdownTable'; }
require_ok 'Text::MarkdownTable';
sub is_table(@) {
my ($message, $expect,$data) = (pop,pop,shift);
my $out = "";
my $table = Text::MarkdownTable->new(@_, file => \$out);
$table->add($_) for @$data;
$table->done;
is $out, $expect, $message;
}
is_table [ ], columns => "foo,bar", '', "empty table";
is_table [{a => 'moose', b => '1'},
{a => "p\nony", b => '2'},
{a => 'shr|mp', b => '3'}],
<<TABLE, "MultiMarkdown format ok";
| a | b |
|--------|---|
| moose | 1 |
| p ony | 2 |
| shr mp | 3 |
TABLE
is_table [{ a => 'Hello', b => 'World' }],
fields => { a => 'Longname', x => 'X', y => undef },
<<TABLE, "custom column names as HASH";
| Longname | X | y |
|----------|---|---|
| Hello | | |
TABLE
is_table [{ a => 'Hello', b => 'happy', c => 'World', d => '!' }],
columns => ['greet',undef,'greet',''],
<<TABLE, "custom column names as ARRAY";
| greet | | greet | |
|-------|-------|-------|---|
| Hello | happy | World | ! |
TABLE
is_table [{ aa => 'Hi', b => 'World', c => 'long value' }],
widths => '5,3,6',
<<TABLE, "custom column width / truncation";
| aa | b | c |
|-------|-----|--------|
| Hi | Wor | lon... |
TABLE
is_table [{ aa => 'Hi', b => 'World', c => 'long value' }],
widths => '5,3,6', condense => 1,
<<TABLE, "condense with truncation";
aa|b|c
--|-|-
Hi|Wor|lon...
TABLE
ok !Text::MarkdownTable->new->streaming, "no streaming by default";
my $out = "";
my $table = Text::MarkdownTable->new( condense => 1, file => \$out );
$table->add({ foo => 1, bar => 1024 });
ok $table->streaming, "streaming mode";
is $out, <<TABLE, "streaming mode";
bar|foo
---|---
1024|1
TABLE
$table->add({ doz => 7, bar => 0, doz => 'ignored' });
is $out, <<TABLE, "streaming mode";
bar|foo
---|---
1024|1
0|
TABLE
is_table [{a => 7},{a => 8}],
header => 0,
"| 7 |\n| 8 |\n", "disable header";
is_table [{a => 7, b=> 1},{a => 8}],
header => 0, condense => 1,
"7|1\n8|\n", "vbar delimited values";
is_table([{foo => 1, bar => 2}], edges => 0, <<TABLE, "edges disabled");
bar | foo
----|----
2 | 1
TABLE
is_table([{a => 1, b => 2, c => 3}], edges => 0, <<TABLE, "edges disabled");
a | b | c
--|---|--
1 | 2 | 3
TABLE
done_testing;