1
0
Fork 0
libfort/tests/test_table.c

820 lines
28 KiB
C
Raw Normal View History

2018-03-14 19:30:27 +01:00
//#define FT_EXTERN static
2018-01-01 09:26:34 +01:00
#include "tests.h"
#include "fort.h"
#include <string.h>
2018-01-01 19:45:01 +01:00
#include <stdlib.h>
#include <stdio.h>
2018-01-17 19:22:57 +01:00
//#include "fort.c"
#include "table.h"
2018-01-21 11:22:46 +01:00
#include "options.h"
#include "vector.h"
2018-02-25 09:39:41 +01:00
int set_test_options_for_table(FTABLE *table)
{
assert(table);
int status = F_SUCCESS;
2018-03-14 20:18:59 +01:00
status |= ft_set_option(table, FT_ANY_ROW, FT_ANY_COLUMN, FT_OPT_BOTTOM_PADDING, 1);
status |= ft_set_option(table, FT_ANY_ROW, FT_ANY_COLUMN, FT_OPT_TOP_PADDING, 1);
status |= ft_set_option(table, FT_ANY_ROW, FT_ANY_COLUMN, FT_OPT_LEFT_PADDING, 1);
status |= ft_set_option(table, FT_ANY_ROW, FT_ANY_COLUMN, FT_OPT_RIGHT_PADDING, 1);
status |= ft_set_option(table, FT_ANY_ROW, FT_ANY_COLUMN, FT_OPT_EMPTY_STR_HEIGHT, 1);
2018-02-27 19:41:58 +01:00
2018-02-25 09:39:41 +01:00
assert_true( status == F_SUCCESS );
2018-03-12 20:28:55 +01:00
struct ft_border_style brdr_style;
brdr_style.border_chs.top_border_ch = '-';
brdr_style.border_chs.separator_ch = '-';
brdr_style.border_chs.bottom_border_ch = '-';
brdr_style.border_chs.side_border_ch = '|';
brdr_style.border_chs.out_intersect_ch = '+';
brdr_style.border_chs.in_intersect_ch = '+';
brdr_style.header_border_chs.top_border_ch = '-';
brdr_style.header_border_chs.separator_ch = '-';
brdr_style.header_border_chs.bottom_border_ch = '-';
brdr_style.header_border_chs.side_border_ch = '|';
brdr_style.header_border_chs.out_intersect_ch = '+';
brdr_style.header_border_chs.in_intersect_ch = '+';
2018-03-14 19:30:27 +01:00
brdr_style.hor_separator_char = '=';
2018-03-14 20:18:59 +01:00
return ft_set_border_style(table, &brdr_style);
2018-02-25 09:39:41 +01:00
}
2018-01-21 11:22:46 +01:00
2018-02-25 09:39:41 +01:00
int set_test_options_as_default()
{
int status = F_SUCCESS;
2018-02-27 18:59:02 +01:00
2018-03-14 20:18:59 +01:00
status |= ft_set_default_option(FT_OPT_MIN_WIDTH, 0);
status |= ft_set_default_option(FT_OPT_TEXT_ALIGN, RightAligned);
2018-02-27 18:59:02 +01:00
2018-03-14 20:18:59 +01:00
status |= ft_set_default_option(FT_OPT_BOTTOM_PADDING, 1);
status |= ft_set_default_option(FT_OPT_TOP_PADDING, 1);
status |= ft_set_default_option(FT_OPT_LEFT_PADDING, 1);
status |= ft_set_default_option(FT_OPT_RIGHT_PADDING, 1);
status |= ft_set_default_option(FT_OPT_EMPTY_STR_HEIGHT, 1);
2018-02-27 19:41:58 +01:00
2018-02-25 09:39:41 +01:00
assert_true( status == F_SUCCESS );
2018-03-12 20:28:55 +01:00
struct ft_border_style brdr_style;
brdr_style.border_chs.top_border_ch = '-';
brdr_style.border_chs.separator_ch = '-';
brdr_style.border_chs.bottom_border_ch = '-';
brdr_style.border_chs.side_border_ch = '|';
brdr_style.border_chs.out_intersect_ch = '+';
brdr_style.border_chs.in_intersect_ch = '+';
brdr_style.header_border_chs.top_border_ch = '-';
brdr_style.header_border_chs.separator_ch = '-';
brdr_style.header_border_chs.bottom_border_ch = '-';
brdr_style.header_border_chs.side_border_ch = '|';
brdr_style.header_border_chs.out_intersect_ch = '+';
brdr_style.header_border_chs.in_intersect_ch = '+';
2018-03-14 19:30:27 +01:00
brdr_style.hor_separator_char = '=';
2018-03-14 20:18:59 +01:00
return ft_set_default_border_style(&brdr_style);
2018-02-25 09:39:41 +01:00
}
2018-01-02 10:03:58 +01:00
2018-01-02 20:48:38 +01:00
void test_table_sizes(void **state)
2018-01-02 10:03:58 +01:00
{
(void)state;
FTABLE *table = ft_create_table();
2018-01-21 11:22:46 +01:00
assert_true( table != NULL );
2018-02-25 09:39:41 +01:00
// ft_set_table_options(table, &test_table_opts);
assert_true( set_test_options_for_table(table) == F_SUCCESS);
2018-01-02 10:03:58 +01:00
2018-01-02 20:48:38 +01:00
size_t rows = 0;
size_t cols = 0;
int status = F_SUCCESS;
WHEN("Table is empty") {
status = get_table_sizes(table, &rows, &cols);
assert_true( IS_SUCCESS(status) );
assert_true( rows == 0 );
assert_true( cols == 0 );
}
WHEN("Insert one cell") {
2018-01-22 19:31:03 +01:00
int n = ft_printf_ln(table, "%c", 'c');
2018-01-02 20:48:38 +01:00
assert_true( n == 1 );
status = get_table_sizes(table, &rows, &cols);
assert_true( IS_SUCCESS(status) );
assert_true( rows == 1 );
assert_true( cols == 1 );
}
WHEN("Insert two cells in the next row") {
2018-01-22 19:31:03 +01:00
int n = ft_printf_ln(table, "%c|%c", 'c', 'd');
2018-01-02 20:48:38 +01:00
assert_true( n == 2 );
status = get_table_sizes(table, &rows, &cols);
assert_true( IS_SUCCESS(status) );
assert_true( rows == 2 );
assert_true( cols == 2 );
}
WHEN("Insert five cells in the next row") {
2018-01-22 19:31:03 +01:00
int n = ft_printf_ln(table, "%d|%d|%d|%d|%d", 1, 2, 3, 4, 5);
2018-01-02 20:48:38 +01:00
assert_true( n == 5 );
status = get_table_sizes(table, &rows, &cols);
assert_true( IS_SUCCESS(status) );
assert_true( rows == 3 );
assert_true( cols == 5 );
}
ft_destroy_table(table);
}
void test_table_geometry(void **state)
{
(void)state;
FTABLE *table = ft_create_table();
2018-01-21 11:22:46 +01:00
assert_true( table != NULL );
2018-02-25 09:39:41 +01:00
// ft_set_table_options(table, &test_table_opts);
assert_true( set_test_options_for_table(table) == F_SUCCESS);
2018-01-02 10:03:58 +01:00
size_t height = 0;
size_t width = 0;
2018-01-02 20:48:38 +01:00
int status = F_SUCCESS;
2018-01-02 10:03:58 +01:00
2018-01-02 20:48:38 +01:00
WHEN("Table is empty") {
status = table_geometry(table, &height, &width);
assert_true( IS_SUCCESS(status) );
assert_true( height == 2 );
assert_true( width == 3 );
}
WHEN("Table has one cell") {
2018-01-22 19:31:03 +01:00
int n = ft_printf_ln(table, "%c", 'c');
2018-01-02 20:48:38 +01:00
assert_true( n == 1 );
status = table_geometry(table, &height, &width);
assert_true( IS_SUCCESS(status) );
assert_true( height == 5 );
assert_true( width == 6 );
}
WHEN("Inserting 3 cells in the next row") {
2018-01-22 19:31:03 +01:00
int n = ft_printf_ln(table, "%c|%s|%c", 'c', "as", 'e');
2018-01-02 20:48:38 +01:00
assert_true( n == 3 );
status = table_geometry(table, &height, &width);
assert_true( IS_SUCCESS(status) );
assert_true( height == 9 );
assert_true( width == 15 );
}
2018-01-02 10:03:58 +01:00
ft_destroy_table(table);
}
2018-01-01 09:26:34 +01:00
void test_table_basic(void **state)
{
(void)state;
2018-01-21 09:19:18 +01:00
FTABLE *table = NULL;
2018-01-01 09:26:34 +01:00
2018-01-02 20:48:38 +01:00
WHEN("All columns are equal and not empty") {
2018-01-21 09:19:18 +01:00
table = ft_create_table();
2018-01-21 11:22:46 +01:00
assert_true( table != NULL );
2018-02-25 09:39:41 +01:00
// ft_set_table_options(table, &test_table_opts);
assert_true( set_test_options_for_table(table) == F_SUCCESS);
2018-01-21 09:19:18 +01:00
2018-03-14 20:18:59 +01:00
ft_set_option(table, 0, FT_ANY_COLUMN, FT_OPT_ROW_TYPE, Header);
2018-03-05 19:18:26 +01:00
int n = ft_printf_ln(table, "%d|%c|%s|%f", 3, 'c', "234", 3.14);
2018-01-02 20:48:38 +01:00
assert_true( n == 4 );
2018-01-22 19:31:03 +01:00
n = ft_printf_ln(table, "%d|%c|%s|%f", 3, 'c', "234", 3.14);
2018-01-02 20:48:38 +01:00
assert_true( n == 4 );
2018-01-22 19:31:03 +01:00
n = ft_printf_ln(table, "%d|%c|%s|%f", 3, 'c', "234", 3.14);
2018-01-02 20:48:38 +01:00
assert_true( n == 4 );
2018-01-01 19:45:01 +01:00
const char *table_str = ft_to_string(table);
2018-01-02 20:48:38 +01:00
assert_true( table_str != NULL );
const char *table_str_etalon =
2018-01-15 19:33:48 +01:00
"+---+---+-----+----------+\n"
2018-01-02 20:48:38 +01:00
"| | | | |\n"
"| 3 | c | 234 | 3.140000 |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+---+---+-----+----------+\n"
2018-01-02 20:48:38 +01:00
"| | | | |\n"
"| 3 | c | 234 | 3.140000 |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+---+---+-----+----------+\n"
2018-01-02 20:48:38 +01:00
"| | | | |\n"
"| 3 | c | 234 | 3.140000 |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+---+---+-----+----------+\n";
2018-01-02 20:48:38 +01:00
// fprintf(stderr, "content:\n%s", table_str);
2018-01-02 10:03:58 +01:00
2018-01-02 20:48:38 +01:00
assert_true( strcmp(table_str, table_str_etalon) == 0);
2018-01-01 19:45:01 +01:00
2018-01-02 20:48:38 +01:00
ft_destroy_table(table);
}
2018-01-01 09:26:34 +01:00
2018-01-02 20:48:38 +01:00
WHEN("All columns are not equal and not empty") {
table = ft_create_table();
2018-01-21 11:22:46 +01:00
assert_true( table != NULL );
2018-02-25 09:39:41 +01:00
// ft_set_table_options(table, &test_table_opts);
assert_true( set_test_options_for_table(table) == F_SUCCESS);
2018-01-02 20:48:38 +01:00
2018-03-14 20:18:59 +01:00
ft_set_option(table, 0, FT_ANY_COLUMN, FT_OPT_ROW_TYPE, Header);
2018-03-05 19:18:26 +01:00
int n = ft_printf_ln(table, "%d|%c|%s|%f", 3, 'c', "234", 3.14);
2018-01-02 20:48:38 +01:00
assert_true( n == 4 );
2018-01-22 19:31:03 +01:00
n = ft_printf_ln(table, "%c|%s|%f|%d", 'c', "234", 3.14, 3);
2018-01-02 20:48:38 +01:00
assert_true( n == 4 );
2018-01-22 19:31:03 +01:00
n = ft_printf_ln(table, "%s|%f|%d|%c", "234", 3.14, 3, 'c');
2018-01-02 20:48:38 +01:00
assert_true( n == 4 );
const char *table_str = ft_to_string(table);
2018-01-02 20:48:38 +01:00
assert_true( table_str != NULL );
const char *table_str_etalon =
2018-01-15 19:33:48 +01:00
"+-----+----------+----------+----------+\n"
2018-01-02 20:48:38 +01:00
"| | | | |\n"
"| 3 | c | 234 | 3.140000 |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+-----+----------+----------+----------+\n"
2018-01-02 20:48:38 +01:00
"| | | | |\n"
"| c | 234 | 3.140000 | 3 |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+-----+----------+----------+----------+\n"
2018-01-02 20:48:38 +01:00
"| | | | |\n"
"| 234 | 3.140000 | 3 | c |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+-----+----------+----------+----------+\n";
2018-01-02 20:48:38 +01:00
// fprintf(stderr, "content:\n%s", table_str);
assert_true( strcmp(table_str, table_str_etalon) == 0);
ft_destroy_table(table);
}
WHEN("All columns are not equal and some cells are empty") {
table = ft_create_table();
2018-01-21 11:22:46 +01:00
assert_true( table != NULL );
2018-02-25 09:39:41 +01:00
// ft_set_table_options(table, &test_table_opts);
assert_true( set_test_options_for_table(table) == F_SUCCESS);
2018-01-02 20:48:38 +01:00
2018-03-14 20:18:59 +01:00
ft_set_option(table, 0, FT_ANY_COLUMN, FT_OPT_ROW_TYPE, Header);
2018-03-05 19:18:26 +01:00
int n = ft_printf_ln(table, "||%s|%f", "234", 3.14);
2018-01-02 20:48:38 +01:00
assert_true( n == 4 );
2018-01-22 19:31:03 +01:00
n = ft_printf_ln(table, "%c|%s|%f", 'c', "234", 3.14);
2018-01-02 20:48:38 +01:00
assert_true( n == 3 );
2018-01-22 19:31:03 +01:00
n = ft_printf_ln(table, "%s|%f||", "234", 3.14);
2018-01-02 20:48:38 +01:00
assert_true( n == 4 );
const char *table_str = ft_to_string(table);
2018-01-02 20:48:38 +01:00
assert_true( table_str != NULL );
const char *table_str_etalon =
2018-01-15 19:33:48 +01:00
"+-----+----------+----------+----------+\n"
2018-01-02 20:48:38 +01:00
"| | | | |\n"
"| | | 234 | 3.140000 |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+-----+----------+----------+----------+\n"
2018-01-02 20:48:38 +01:00
"| | | | |\n"
"| c | 234 | 3.140000 | |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+-----+----------+----------+----------+\n"
2018-01-02 20:48:38 +01:00
"| | | | |\n"
2018-01-03 08:10:54 +01:00
"| 234 | 3.140000 | | |\n"
2018-01-02 20:48:38 +01:00
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+-----+----------+----------+----------+\n";
2018-01-02 20:48:38 +01:00
2018-01-03 08:10:54 +01:00
// fprintf(stderr, "content:\n%s", table_str);
assert_true( strcmp(table_str, table_str_etalon) == 0);
ft_destroy_table(table);
}
WHEN("All cells are empty") {
table = ft_create_table();
2018-01-21 11:22:46 +01:00
assert_true( table != NULL );
2018-02-25 09:39:41 +01:00
// ft_set_table_options(table, &test_table_opts);
assert_true( set_test_options_for_table(table) == F_SUCCESS);
2018-01-03 08:10:54 +01:00
2018-03-14 20:18:59 +01:00
ft_set_option(table, 0, FT_ANY_COLUMN, FT_OPT_ROW_TYPE, Header);
2018-03-05 19:18:26 +01:00
int n = ft_printf_ln(table, "|||");
2018-01-03 08:10:54 +01:00
assert_true( n == 4 );
2018-01-22 19:31:03 +01:00
n = ft_printf_ln(table, "|||");
2018-01-03 08:10:54 +01:00
assert_true( n == 4 );
2018-01-22 19:31:03 +01:00
n = ft_printf_ln(table, "|||");
2018-01-03 08:10:54 +01:00
assert_true( n == 4 );
const char *table_str = ft_to_string(table);
2018-01-03 08:10:54 +01:00
assert_true( table_str != NULL );
const char *table_str_etalon =
2018-01-15 19:33:48 +01:00
"+--+--+--+--+\n"
2018-01-03 08:10:54 +01:00
"| | | | |\n"
"| | | | |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+--+--+--+--+\n"
2018-01-03 08:10:54 +01:00
"| | | | |\n"
"| | | | |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+--+--+--+--+\n"
2018-01-03 08:10:54 +01:00
"| | | | |\n"
"| | | | |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+--+--+--+--+\n";
2018-01-03 08:10:54 +01:00
2018-01-02 20:48:38 +01:00
// fprintf(stderr, "content:\n%s", table_str);
assert_true( strcmp(table_str, table_str_etalon) == 0);
ft_destroy_table(table);
}
2018-01-03 08:40:54 +01:00
}
2018-01-21 11:22:46 +01:00
FTABLE *create_test_int_table(int set_test_opts)
2018-01-03 08:40:54 +01:00
{
FTABLE *table = NULL;
table = ft_create_table();
2018-01-21 11:22:46 +01:00
assert_true( table != NULL );
2018-02-25 09:39:41 +01:00
if (set_test_opts) {
assert_true( set_test_options_for_table(table) == F_SUCCESS);
}
// ft_set_table_options(table, &test_table_opts);
2018-01-03 08:40:54 +01:00
assert_true (table != NULL);
2018-03-14 20:18:59 +01:00
ft_set_option(table, 0, FT_ANY_COLUMN, FT_OPT_ROW_TYPE, Header);
2018-03-05 19:18:26 +01:00
int n = ft_printf_ln(table, "%d|%d|%d|%d", 3, 4, 55, 67);
2018-01-03 08:40:54 +01:00
assert_true( n == 4 );
assert(ft_write(table, "3") == F_SUCCESS);
assert(ft_write(table, "4") == F_SUCCESS);
assert(ft_write(table, "55") == F_SUCCESS);
assert(ft_write_ln(table, "67") == F_SUCCESS);
assert(ft_write(table, "3") == F_SUCCESS);
assert(ft_write(table, "4") == F_SUCCESS);
assert(ft_write(table, "55") == F_SUCCESS);
assert(ft_write_ln(table, "67") == F_SUCCESS);
2018-01-03 08:40:54 +01:00
return table;
}
void test_table_options(void **state)
{
(void)state;
FTABLE *table = NULL;
2018-01-21 11:22:46 +01:00
// fort_table_options_t def_options =;
// ft_get_default_options(&def_options);
2018-01-03 08:40:54 +01:00
WHEN("All paddings = 1") {
2018-02-25 09:39:41 +01:00
set_test_options_as_default();
2018-03-14 20:18:59 +01:00
ft_set_default_option(FT_OPT_BOTTOM_PADDING, 1);
ft_set_default_option(FT_OPT_TOP_PADDING, 1);
ft_set_default_option(FT_OPT_LEFT_PADDING, 1);
ft_set_default_option(FT_OPT_RIGHT_PADDING, 1);
2018-01-03 08:40:54 +01:00
2018-01-21 11:22:46 +01:00
table = create_test_int_table(0);
2018-01-03 08:40:54 +01:00
const char *table_str = ft_to_string(table);
2018-01-03 08:40:54 +01:00
assert_true( table_str != NULL );
const char *table_str_etalon =
2018-01-15 19:33:48 +01:00
"+---+---+----+----+\n"
2018-01-03 08:40:54 +01:00
"| | | | |\n"
"| 3 | 4 | 55 | 67 |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+---+---+----+----+\n"
2018-01-03 08:40:54 +01:00
"| | | | |\n"
"| 3 | 4 | 55 | 67 |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+---+---+----+----+\n"
2018-01-03 08:40:54 +01:00
"| | | | |\n"
"| 3 | 4 | 55 | 67 |\n"
2018-02-04 14:21:04 +01:00
"| | | | |\n"
"+---+---+----+----+\n";
// fprintf(stderr, "content:\n%s", table_str);
assert_true( strcmp(table_str, table_str_etalon) == 0);
ft_destroy_table(table);
}
WHEN("Separator testing") {
2018-03-14 19:30:27 +01:00
table = create_test_int_table(1);
2018-02-04 14:21:04 +01:00
ft_add_separator(table);
2018-03-14 20:18:59 +01:00
ft_set_option(table, 0, FT_ANY_COLUMN, FT_OPT_ROW_TYPE, Header);
2018-03-05 19:18:26 +01:00
int n = ft_printf_ln(table, "%d|%d|%d|%d", 3, 4, 55, 67);
2018-02-04 14:21:04 +01:00
assert_true( n == 4 );
const char *table_str = ft_to_string(table);
assert_true( table_str != NULL );
const char *table_str_etalon =
"+---+---+----+----+\n"
"| | | | |\n"
"| 3 | 4 | 55 | 67 |\n"
"| | | | |\n"
"+---+---+----+----+\n"
"| | | | |\n"
"| 3 | 4 | 55 | 67 |\n"
"| | | | |\n"
"+---+---+----+----+\n"
"| | | | |\n"
"| 3 | 4 | 55 | 67 |\n"
"| | | | |\n"
"+===+===+====+====+\n"
"| | | | |\n"
"| 3 | 4 | 55 | 67 |\n"
2018-01-03 08:40:54 +01:00
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+---+---+----+----+\n";
2018-01-03 08:40:54 +01:00
// fprintf(stderr, "content:\n%s", table_str);
assert_true( strcmp(table_str, table_str_etalon) == 0);
ft_destroy_table(table);
}
WHEN("Top and bottom padding = 0") {
2018-02-27 19:41:58 +01:00
2018-03-14 20:18:59 +01:00
ft_set_default_option(FT_OPT_BOTTOM_PADDING, 0);
ft_set_default_option(FT_OPT_TOP_PADDING, 0);
ft_set_default_option(FT_OPT_LEFT_PADDING, 1);
ft_set_default_option(FT_OPT_RIGHT_PADDING, 1);
2018-01-03 08:40:54 +01:00
2018-01-21 11:22:46 +01:00
table = create_test_int_table(0);
2018-01-03 08:40:54 +01:00
const char *table_str = ft_to_string(table);
2018-01-03 08:40:54 +01:00
assert_true( table_str != NULL );
const char *table_str_etalon =
2018-01-15 19:33:48 +01:00
"+---+---+----+----+\n"
2018-01-03 08:40:54 +01:00
"| 3 | 4 | 55 | 67 |\n"
2018-01-15 19:33:48 +01:00
"+---+---+----+----+\n"
2018-01-03 08:40:54 +01:00
"| 3 | 4 | 55 | 67 |\n"
2018-01-15 19:33:48 +01:00
"+---+---+----+----+\n"
2018-01-03 08:40:54 +01:00
"| 3 | 4 | 55 | 67 |\n"
2018-01-15 19:33:48 +01:00
"+---+---+----+----+\n";
2018-01-03 08:40:54 +01:00
// fprintf(stderr, "content:\n%s", table_str);
assert_true( strcmp(table_str, table_str_etalon) == 0);
ft_destroy_table(table);
}
WHEN("Left and right padding = 0") {
2018-02-27 19:41:58 +01:00
2018-03-14 20:18:59 +01:00
ft_set_default_option(FT_OPT_BOTTOM_PADDING, 1);
ft_set_default_option(FT_OPT_TOP_PADDING, 1);
ft_set_default_option(FT_OPT_LEFT_PADDING, 0);
ft_set_default_option(FT_OPT_RIGHT_PADDING, 0);
2018-01-03 08:40:54 +01:00
2018-01-21 11:22:46 +01:00
table = create_test_int_table(0);
2018-01-03 08:40:54 +01:00
const char *table_str = ft_to_string(table);
2018-01-03 08:40:54 +01:00
assert_true( table_str != NULL );
const char *table_str_etalon =
2018-01-15 19:33:48 +01:00
"+-+-+--+--+\n"
2018-01-03 08:40:54 +01:00
"| | | | |\n"
"|3|4|55|67|\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+-+-+--+--+\n"
2018-01-03 08:40:54 +01:00
"| | | | |\n"
"|3|4|55|67|\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+-+-+--+--+\n"
2018-01-03 08:40:54 +01:00
"| | | | |\n"
"|3|4|55|67|\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+-+-+--+--+\n";
2018-01-03 08:40:54 +01:00
// fprintf(stderr, "content:\n%s", table_str);
assert_true( strcmp(table_str, table_str_etalon) == 0);
ft_destroy_table(table);
}
WHEN("All paddings = 0") {
2018-02-27 19:41:58 +01:00
2018-03-14 20:18:59 +01:00
ft_set_default_option(FT_OPT_BOTTOM_PADDING, 0);
ft_set_default_option(FT_OPT_TOP_PADDING, 0);
ft_set_default_option(FT_OPT_LEFT_PADDING, 0);
ft_set_default_option(FT_OPT_RIGHT_PADDING, 0);
2018-01-03 08:40:54 +01:00
2018-01-21 11:22:46 +01:00
table = create_test_int_table(0);
2018-01-03 08:40:54 +01:00
const char *table_str = ft_to_string(table);
2018-01-03 08:40:54 +01:00
assert_true( table_str != NULL );
const char *table_str_etalon =
2018-01-15 19:33:48 +01:00
"+-+-+--+--+\n"
2018-01-03 08:40:54 +01:00
"|3|4|55|67|\n"
2018-01-15 19:33:48 +01:00
"+-+-+--+--+\n"
2018-01-03 08:40:54 +01:00
"|3|4|55|67|\n"
2018-01-15 19:33:48 +01:00
"+-+-+--+--+\n"
2018-01-03 08:40:54 +01:00
"|3|4|55|67|\n"
2018-01-15 19:33:48 +01:00
"+-+-+--+--+\n";
2018-01-03 08:40:54 +01:00
// fprintf(stderr, "content:\n%s", table_str);
assert_true( strcmp(table_str, table_str_etalon) == 0);
ft_destroy_table(table);
}
WHEN("Empty string has 0 heigt") {
2018-02-27 19:41:58 +01:00
2018-03-14 20:18:59 +01:00
ft_set_default_option(FT_OPT_BOTTOM_PADDING, 1);
ft_set_default_option(FT_OPT_TOP_PADDING, 1);
ft_set_default_option(FT_OPT_LEFT_PADDING, 1);
ft_set_default_option(FT_OPT_RIGHT_PADDING, 1);
ft_set_default_option(FT_OPT_EMPTY_STR_HEIGHT, 0);
2018-01-21 11:22:46 +01:00
table = create_test_int_table(0);
2018-01-21 10:53:26 +01:00
int n = ft_printf_ln(table, "|||");
assert_true( n == 4 );
const char *table_str = ft_to_string(table);
assert_true( table_str != NULL );
const char *table_str_etalon =
2018-01-15 19:33:48 +01:00
"+---+---+----+----+\n"
"| | | | |\n"
"| 3 | 4 | 55 | 67 |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+---+---+----+----+\n"
"| | | | |\n"
"| 3 | 4 | 55 | 67 |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+---+---+----+----+\n"
"| | | | |\n"
"| 3 | 4 | 55 | 67 |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+---+---+----+----+\n"
"| | | | |\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+---+---+----+----+\n";
// fprintf(stderr, "content:\n%s", table_str);
assert_true( strcmp(table_str, table_str_etalon) == 0);
ft_destroy_table(table);
}
2018-01-03 08:40:54 +01:00
WHEN("Changing cell separators") {
2018-01-07 10:22:26 +01:00
2018-03-12 20:28:55 +01:00
struct ft_border_style brdr_style;
brdr_style.border_chs.top_border_ch = '|';
brdr_style.border_chs.separator_ch = '|';
brdr_style.border_chs.bottom_border_ch = '|';
brdr_style.border_chs.side_border_ch = '=';
brdr_style.border_chs.out_intersect_ch = '+';
brdr_style.border_chs.in_intersect_ch = '#';
2018-02-25 09:39:41 +01:00
2018-03-12 20:28:55 +01:00
brdr_style.header_border_chs.top_border_ch = '*';
brdr_style.header_border_chs.separator_ch = '*';
brdr_style.header_border_chs.bottom_border_ch = '*';
brdr_style.header_border_chs.side_border_ch = 'v';
brdr_style.header_border_chs.out_intersect_ch = '+';
brdr_style.header_border_chs.in_intersect_ch = '#';
2018-03-14 20:18:59 +01:00
ft_set_default_border_style(&brdr_style);
2018-01-07 10:22:26 +01:00
2018-01-03 08:40:54 +01:00
2018-01-21 11:22:46 +01:00
table = create_test_int_table(0);
const char *table_str = ft_to_string(table);
assert_true( table_str != NULL );
const char *table_str_etalon =
2018-02-25 09:39:41 +01:00
"+***+***+****+****+\n"
2018-01-06 10:19:02 +01:00
"v v v v v\n"
"v 3 v 4 v 55 v 67 v\n"
"v v v v v\n"
2018-02-25 09:39:41 +01:00
"+***#***#****#****+\n"
"= = = = =\n"
"= 3 = 4 = 55 = 67 =\n"
"= = = = =\n"
2018-02-25 09:39:41 +01:00
"+|||#|||#||||#||||+\n"
"= = = = =\n"
"= 3 = 4 = 55 = 67 =\n"
"= = = = =\n"
2018-02-25 09:39:41 +01:00
"+|||+|||+||||+||||+\n";
// fprintf(stderr, "content:\n%s", table_str);
assert_true( strcmp(table_str, table_str_etalon) == 0);
ft_destroy_table(table);
2018-03-12 20:28:55 +01:00
brdr_style.border_chs.top_border_ch = '|';
brdr_style.border_chs.separator_ch = '\0';
brdr_style.border_chs.bottom_border_ch = '|';
brdr_style.border_chs.side_border_ch = '=';
brdr_style.border_chs.out_intersect_ch = '+';
brdr_style.border_chs.in_intersect_ch = '\0';
2018-02-25 09:39:41 +01:00
2018-03-12 20:28:55 +01:00
brdr_style.header_border_chs.top_border_ch = '*';
brdr_style.header_border_chs.separator_ch = '*';
brdr_style.header_border_chs.bottom_border_ch = '*';
brdr_style.header_border_chs.side_border_ch = 'v';
brdr_style.header_border_chs.out_intersect_ch = '+';
brdr_style.header_border_chs.in_intersect_ch = '#';
2018-02-25 09:39:41 +01:00
2018-03-14 20:18:59 +01:00
ft_set_default_border_style(&brdr_style);
2018-02-25 09:39:41 +01:00
2018-03-14 20:18:59 +01:00
ft_set_default_option(FT_OPT_BOTTOM_PADDING, 0);
ft_set_default_option(FT_OPT_TOP_PADDING, 0);
ft_set_default_option(FT_OPT_LEFT_PADDING, 1);
ft_set_default_option(FT_OPT_RIGHT_PADDING, 1);
ft_set_default_option(FT_OPT_EMPTY_STR_HEIGHT, 0);
2018-01-21 11:22:46 +01:00
table = create_test_int_table(0);
table_str = ft_to_string(table);
assert_true( table_str != NULL );
table_str_etalon =
2018-02-25 09:39:41 +01:00
"+***+***+****+****+\n"
"v 3 v 4 v 55 v 67 v\n"
2018-02-25 09:39:41 +01:00
"+***#***#****#****+\n"
"= 3 = 4 = 55 = 67 =\n"
"= 3 = 4 = 55 = 67 =\n"
2018-02-25 09:39:41 +01:00
"+|||+|||+||||+||||+\n";
// fprintf(stderr, "content:\n%s", table_str);
assert_true( strcmp(table_str, table_str_etalon) == 0);
ft_destroy_table(table);
}
2018-01-02 20:48:38 +01:00
WHEN("Setting options for a particular table") {
2018-01-21 11:22:46 +01:00
table = create_test_int_table(0);
2018-02-25 09:39:41 +01:00
set_test_options_for_table(table);
2018-03-14 20:18:59 +01:00
ft_set_option(table, FT_ANY_ROW, FT_ANY_COLUMN, FT_OPT_BOTTOM_PADDING, 0);
ft_set_option(table, FT_ANY_ROW, FT_ANY_COLUMN, FT_OPT_TOP_PADDING, 0);
ft_set_option(table, FT_ANY_ROW, FT_ANY_COLUMN, FT_OPT_LEFT_PADDING, 0);
ft_set_option(table, FT_ANY_ROW, FT_ANY_COLUMN, FT_OPT_RIGHT_PADDING, 0);
const char *table_str = ft_to_string(table);
assert_true( table_str != NULL );
const char *table_str_etalon =
2018-01-15 19:33:48 +01:00
"+-+-+--+--+\n"
"|3|4|55|67|\n"
2018-01-15 19:33:48 +01:00
"+-+-+--+--+\n"
"|3|4|55|67|\n"
2018-01-15 19:33:48 +01:00
"+-+-+--+--+\n"
"|3|4|55|67|\n"
2018-01-15 19:33:48 +01:00
"+-+-+--+--+\n";
// fprintf(stderr, "content:\n%s", table_str);
assert_true( strcmp(table_str, table_str_etalon) == 0);
2018-02-27 19:41:58 +01:00
2018-03-14 20:18:59 +01:00
ft_set_option(table, FT_ANY_ROW, FT_ANY_COLUMN, FT_OPT_BOTTOM_PADDING, 1);
ft_set_option(table, FT_ANY_ROW, FT_ANY_COLUMN, FT_OPT_TOP_PADDING, 1);
ft_set_option(table, FT_ANY_ROW, FT_ANY_COLUMN, FT_OPT_LEFT_PADDING, 0);
ft_set_option(table, FT_ANY_ROW, FT_ANY_COLUMN, FT_OPT_RIGHT_PADDING, 0);
ft_set_option(table, FT_ANY_ROW, FT_ANY_COLUMN, FT_OPT_EMPTY_STR_HEIGHT, 0);
2018-02-25 09:39:41 +01:00
table_str = ft_to_string(table);
assert_true( table_str != NULL );
table_str_etalon =
2018-01-15 19:33:48 +01:00
"+-+-+--+--+\n"
"| | | | |\n"
"|3|4|55|67|\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+-+-+--+--+\n"
"| | | | |\n"
"|3|4|55|67|\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+-+-+--+--+\n"
"| | | | |\n"
"|3|4|55|67|\n"
"| | | | |\n"
2018-01-15 19:33:48 +01:00
"+-+-+--+--+\n";
2018-01-13 09:36:04 +01:00
// fprintf(stderr, "content:\n%s", table_str);
assert_true( strcmp(table_str, table_str_etalon) == 0);
ft_destroy_table(table);
}
2018-01-01 09:26:34 +01:00
2018-01-07 19:08:48 +01:00
2018-01-13 09:36:04 +01:00
WHEN("Set table width and column alignment") {
2018-02-25 09:39:41 +01:00
set_test_options_as_default();
2018-01-07 19:08:48 +01:00
2018-01-21 11:22:46 +01:00
table = create_test_int_table(0);
2018-02-25 17:25:00 +01:00
int status = F_SUCCESS;
2018-02-25 19:43:20 +01:00
2018-03-14 20:18:59 +01:00
status |= ft_set_option(table, FT_ANY_ROW, 1, FT_OPT_MIN_WIDTH, 7);
status |= ft_set_option(table, FT_ANY_ROW, 1, FT_OPT_TEXT_ALIGN, LeftAligned);
status |= ft_set_option(table, FT_ANY_ROW, 2, FT_OPT_MIN_WIDTH, 8);
status |= ft_set_option(table, FT_ANY_ROW, 2, FT_OPT_TEXT_ALIGN, CenterAligned);
2018-02-26 19:54:36 +01:00
2018-03-14 20:18:59 +01:00
status |= ft_set_option(table, 2, 3, FT_OPT_MIN_WIDTH, 6);
status |= ft_set_option(table, 2, 3, FT_OPT_TEXT_ALIGN, LeftAligned);
2018-02-25 17:25:00 +01:00
assert_true( status == F_SUCCESS);
2018-01-07 19:08:48 +01:00
const char *table_str = ft_to_string(table);
2018-01-07 19:08:48 +01:00
assert_true( table_str != NULL );
const char *table_str_etalon =
2018-02-26 19:54:36 +01:00
"+---+-------+--------+------+\n"
"| | | | |\n"
"| 3 | 4 | 55 | 67 |\n"
"| | | | |\n"
"+---+-------+--------+------+\n"
"| | | | |\n"
"| 3 | 4 | 55 | 67 |\n"
"| | | | |\n"
"+---+-------+--------+------+\n"
"| | | | |\n"
"| 3 | 4 | 55 | 67 |\n"
"| | | | |\n"
"+---+-------+--------+------+\n";
2018-01-07 19:08:48 +01:00
// fprintf(stderr, "content:\n%s", table_str);
assert_true( strcmp(table_str, table_str_etalon) == 0);
ft_destroy_table(table);
}
2018-01-21 09:19:18 +01:00
2018-02-27 18:59:02 +01:00
WHEN("Set table width and column alignment as default") {
set_test_options_as_default();
int status = F_SUCCESS;
2018-03-14 20:18:59 +01:00
status |= ft_set_default_option(FT_OPT_MIN_WIDTH, 5);
status |= ft_set_default_option(FT_OPT_TEXT_ALIGN, CenterAligned);
2018-02-27 18:59:02 +01:00
assert_true( status == F_SUCCESS);
table = create_test_int_table(0);
const char *table_str = ft_to_string(table);
assert_true( table_str != NULL );
const char *table_str_etalon =
"+-----+-----+-----+-----+\n"
"| | | | |\n"
"| 3 | 4 | 55 | 67 |\n"
"| | | | |\n"
"+-----+-----+-----+-----+\n"
"| | | | |\n"
"| 3 | 4 | 55 | 67 |\n"
"| | | | |\n"
"+-----+-----+-----+-----+\n"
"| | | | |\n"
"| 3 | 4 | 55 | 67 |\n"
"| | | | |\n"
"+-----+-----+-----+-----+\n";
2018-03-05 19:08:14 +01:00
// fprintf(stderr, "content:\n%s", table_str);
2018-02-27 18:59:02 +01:00
assert_true( strcmp(table_str, table_str_etalon) == 0);
ft_destroy_table(table);
}
2018-01-21 09:19:18 +01:00
WHEN("All columns are equal and not empty") {
2018-02-27 18:59:02 +01:00
set_test_options_as_default();
2018-01-21 09:19:18 +01:00
table = ft_create_table();
2018-03-14 20:18:59 +01:00
ft_set_option(table, 0, FT_ANY_COLUMN, FT_OPT_ROW_TYPE, Header);
2018-03-05 19:18:26 +01:00
int n = ft_printf_ln(table, "%d|%c|%s|%f", 4, 'c', "234", 3.14);
2018-01-21 09:19:18 +01:00
assert_true( n == 4 );
2018-01-21 10:53:26 +01:00
n = FT_NWRITE_LN(table, "5", "c", "234\n12", "3.140000");
assert_true( n == F_SUCCESS );
2018-01-22 19:31:03 +01:00
n = ft_printf_ln(table, "%d|%c|%s|%f", 3, 'c', "234", 3.14);
2018-01-21 09:19:18 +01:00
assert_true( n == 4 );
const char *table_str = ft_to_string(table);
assert_true( table_str != NULL );
const char *table_str_etalon =
"+---+---+-----+----------+\n"
"| | | | |\n"
2018-01-21 10:53:26 +01:00
"| 4 | c | 234 | 3.140000 |\n"
2018-01-21 09:19:18 +01:00
"| | | | |\n"
"+---+---+-----+----------+\n"
"| | | | |\n"
2018-01-21 10:53:26 +01:00
"| 5 | c | 234 | 3.140000 |\n"
2018-01-21 09:19:18 +01:00
"| | | 12 | |\n"
"| | | | |\n"
"+---+---+-----+----------+\n"
"| | | | |\n"
"| 3 | c | 234 | 3.140000 |\n"
"| | | | |\n"
"+---+---+-----+----------+\n";
// fprintf(stderr, "content:\n%s", table_str);
assert_true( strcmp(table_str, table_str_etalon) == 0);
ft_destroy_table(table);
}
2018-01-01 09:26:34 +01:00
}