### ----------------------------------------------------
### -- TOP
### -- Licenses: Artistic-2.0
### -- Authors: Tim Nelson
### -- File: xt/02-formatters-parsers.rakutest
### ----------------------------------------------------
#!/usr/bin/raku

use v6.e.PREVIEW;

use	Test;
use	TOP :tests :DEFAULT;

subtest {
	plan 3;

	my $table = Table.new(name => 'input', action => 'ensure');
	isa-ok($table, Table, 'Made table');

	$table.parse(
		command => 'ls -l /usr',
	);

	my $select-table = $table.select(<A B C D E I>);

	my $out-table = $select-table.format(
		'WithBorders',
	#	show-headers => False,
	);
	my $ls-test-output = q:to/END/;
╔════════════╤════╤══════╤══════╤══════╤═════════╗
║ A          │  B │ C    │ D    │    E │ I       ║
╟────────────┼────┼──────┼──────┼──────┼─────────╢
║ total      │ 24 │      │      │      │         ║
║ drwxr-xr-x │  1 │ root │ root │ 4096 │ bin     ║
║ drwxr-xr-x │  1 │ root │ root │ 4096 │ include ║
║ drwxr-xr-x │  1 │ root │ root │ 4096 │ lib     ║
║ drwxr-xr-x │  5 │ root │ root │ 4096 │ local   ║
║ drwxr-xr-x │  1 │ root │ root │ 4096 │ sbin    ║
║ drwxr-xr-x │  1 │ root │ root │ 4096 │ share   ║
╚════════════╧════╧══════╧══════╧══════╧═════════╝
END

	is($out-table, $ls-test-output, 'ls table is as expected');

	my $btable = Table.new(name => 'boxchars', action => 'ensure');

	my $resource-name = 'BoxDrawingCharacters.csv';
        my $resources = table-oriented-programming-resources($resource-name);
        my $resource = $resources{$resource-name};
        my $resource-handle = $resource.open();

	$btable.parse(
		format => 'CSV',
		handle => $resource-handle,
	);

	my $table2 = $btable.grep({
		.{'Primary Weight'} ~~ /^(Double)$/ 
		and .{'Block Name'} eq 'Box'
	});

	my $bout-table = $table2.format(
		'WithBorders',
	#	show-headers => False,
	);

	my $boxchars-test-output = q:to/END/;
╔══════════╤═════╤════════╤══════╤════════════╤═══════════════╤══════════════════╤═══════╤════════════════╤═══════════════╤══════════════════╤══════════════════╤═════════════════╤════════════════════╗
║ Block ID │ Row │ Column │ Char │ Block Name │ Overall Shape │ Overall Position │ Style │ Primary Weight │ Primary Shape │ Primary Position │ Secondary Weight │ Secondary Shape │ Secondary Position ║
╟──────────┼─────┼────────┼──────┼────────────┼───────────────┼──────────────────┼───────┼────────────────┼───────────────┼──────────────────┼──────────────────┼─────────────────┼────────────────────╢
║ U+25     │ 5   │ 0      │ ═    │ Box        │ Straight      │ Horizontal       │ Solid │ Double         │               │                  │                  │                 │                    ║
║ U+25     │ 5   │ 1      │ ║    │ Box        │ Straight      │ Vertical         │ Solid │ Double         │               │                  │                  │                 │                    ║
║ U+25     │ 5   │ 2      │ ╒    │ Box        │ Corner        │ Top-Left         │ Solid │ Double         │ Terminal      │ Left             │ Light            │ Terminal        │ Top                ║
║ U+25     │ 5   │ 3      │ ╓    │ Box        │ Corner        │ Top-Left         │ Solid │ Double         │ Terminal      │ Top              │ Light            │ Terminal        │ Left               ║
║ U+25     │ 5   │ 4      │ ╔    │ Box        │ Corner        │ Top-Left         │ Solid │ Double         │               │                  │                  │                 │                    ║
║ U+25     │ 5   │ 5      │ ╕    │ Box        │ Corner        │ Top-Right        │ Solid │ Double         │ Terminal      │ Right            │ Light            │ Terminal        │ Top                ║
║ U+25     │ 5   │ 6      │ ╖    │ Box        │ Corner        │ Top-Right        │ Solid │ Double         │ Terminal      │ Top              │ Light            │ Terminal        │ Right              ║
║ U+25     │ 5   │ 7      │ ╗    │ Box        │ Corner        │ Top-Right        │ Solid │ Double         │               │                  │                  │                 │                    ║
║ U+25     │ 5   │ 8      │ ╘    │ Box        │ Corner        │ Bottom-Left      │ Solid │ Double         │ Terminal      │ Left             │ Light            │ Terminal        │ Bottom             ║
║ U+25     │ 5   │ 9      │ ╙    │ Box        │ Corner        │ Bottom-Left      │ Solid │ Double         │ Terminal      │ Bottom           │ Light            │ Terminal        │ Left               ║
║ U+25     │ 5   │ A      │ ╚    │ Box        │ Corner        │ Bottom-Left      │ Solid │ Double         │               │                  │                  │                 │                    ║
║ U+25     │ 5   │ B      │ ╛    │ Box        │ Corner        │ Bottom-Right     │ Solid │ Double         │ Terminal      │ Right            │ Light            │ Terminal        │ Bottom             ║
║ U+25     │ 5   │ C      │ ╜    │ Box        │ Corner        │ Bottom-Right     │ Solid │ Double         │ Terminal      │ Bottom           │ Light            │ Terminal        │ Right              ║
║ U+25     │ 5   │ D      │ ╝    │ Box        │ Corner        │ Bottom-Right     │ Solid │ Double         │               │                  │                  │                 │                    ║
║ U+25     │ 5   │ F      │ ╟    │ Box        │ T             │ Left             │ Solid │ Double         │ Straight      │ Vertical         │ Light            │ Terminal        │ Left               ║
║ U+25     │ 6   │ 0      │ ╠    │ Box        │ T             │ Left             │ Solid │ Double         │               │                  │                  │                 │                    ║
║ U+25     │ 6   │ 2      │ ╢    │ Box        │ T             │ Right            │ Solid │ Double         │ Straight      │ Vertical         │ Light            │ Terminal        │ Right              ║
║ U+25     │ 6   │ 3      │ ╣    │ Box        │ T             │ Right            │ Solid │ Double         │               │                  │                  │                 │                    ║
║ U+25     │ 6   │ 4      │ ╤    │ Box        │ T             │ Top              │ Solid │ Double         │ Straight      │ Horizontal       │ Light            │ Terminal        │ Top                ║
║ U+25     │ 6   │ 6      │ ╦    │ Box        │ T             │ Top              │ Solid │ Double         │               │                  │                  │                 │                    ║
║ U+25     │ 6   │ 7      │ ╧    │ Box        │ T             │ Bottom           │ Solid │ Double         │ Straight      │ Horizontal       │ Light            │ Terminal        │ Bottom             ║
║ U+25     │ 6   │ 9      │ ╩    │ Box        │ T             │ Bottom           │ Solid │ Double         │               │                  │                  │                 │                    ║
║ U+25     │ 6   │ A      │ ╪    │ Box        │ Cross         │ Orthogonal       │ Solid │ Double         │ Straight      │ Horizontal       │ Light            │ Straight        │ Vertical           ║
║ U+25     │ 6   │ B      │ ╫    │ Box        │ Cross         │ Orthogonal       │ Solid │ Double         │ Straight      │ Vertical         │ Light            │ Straight        │ Horizontal         ║
║ U+25     │ 6   │ C      │ ╬    │ Box        │ Cross         │ Orthogonal       │ Solid │ Double         │               │                  │                  │                 │                    ║
╚══════════╧═════╧════════╧══════╧════════════╧═══════════════╧══════════════════╧═══════╧════════════════╧═══════════════╧══════════════════╧══════════════════╧═════════════════╧════════════════════╝
END

	is($bout-table, $boxchars-test-output, 'box characters table is as expected');
}, "Formatters and Parsers tests";


