[A] Multiline cells

This commit is contained in:
seleznevae
2018-01-21 11:19:18 +03:00
parent ac6533cd63
commit 859ff31b8a
10 changed files with 333 additions and 18 deletions

View File

@@ -7,7 +7,9 @@ int main(void) {
cmocka_unit_test(test_table_sizes),
cmocka_unit_test(test_table_geometry),
cmocka_unit_test(test_table_basic),
cmocka_unit_test(test_table_options)
cmocka_unit_test(test_table_options),
cmocka_unit_test(test_string_buffer),
};
return cmocka_run_group_tests(tests, NULL, NULL);
}

169
tests/test_string_buffer.c Normal file
View File

@@ -0,0 +1,169 @@
#include "tests.h"
#include "string_buffer.h"
//#include "../src/fort.c"
size_t strchr_count(const char* str, int ch);
const char* str_n_substring_beg(const char* str, int ch, int n);
fort_status_t str_n_substring(const char* str, char ch_separator, size_t n, const char **begin, const char **end);
size_t buffer_text_width(string_buffer_t *buffer);
void test_strchr_count(void);
void test_str_n_substring(void);
void test_buffer_text_width(void);
void test_buffer_text_height(void);
void test_string_buffer(void **state)
{
(void)state;
test_strchr_count();
test_str_n_substring();
test_buffer_text_width();
test_buffer_text_height();
}
void test_strchr_count(void)
{
assert_true(strchr_count(NULL, '\n') == 0);
assert_true(strchr_count("", '\n') == 0);
assert_true(strchr_count("asbd", '\n') == 0);
assert_true(strchr_count("asbd\n", '\n') == 1);
assert_true(strchr_count("\nasbd", '\n') == 1);
assert_true(strchr_count("a\nsbd", '\n') == 1);
assert_true(strchr_count("\n12\n123", '\n') == 2);
assert_true(strchr_count("\n12\n123\n", '\n') == 3);
assert_true(strchr_count("\n\n\n", '\n') == 3);
assert_true(strchr_count("\n123123\n123123\n\n\n123", '\n') == 5);
assert_true(strchr_count("1a23123a123123aaa123", 'a') == 5);
}
void test_str_n_substring(void)
{
const char *empty_str = "";
assert_true(str_n_substring_beg(empty_str, '\n', 0) == empty_str);
assert_true(str_n_substring_beg(empty_str, '\n', 1) == NULL);
assert_true(str_n_substring_beg(empty_str, '\n', 2) == NULL);
const char *str = "123\n5678\n9";
assert_true(str_n_substring_beg(NULL, '\n', 0) == NULL);
assert_true(str_n_substring_beg(str, '\n', 0) == str);
assert_true(str_n_substring_beg(str, '1', 0) == str);
assert_true(str_n_substring_beg(str, '\n', 1) == str + 4);
assert_true(str_n_substring_beg(str, '\n', 2) == str + 9);
assert_true(str_n_substring_beg(str, '\n', 3) == NULL);
const char *str2 = "\n123\n56\n\n9\n";
assert_true(str_n_substring_beg(str2, '\n', 0) == str2);
assert_true(str_n_substring_beg(str2, '\n', 1) == str2 + 1);
assert_true(str_n_substring_beg(str2, '\n', 2) == str2 + 5);
assert_true(str_n_substring_beg(str2, '\n', 3) == str2 + 8);
assert_true(str_n_substring_beg(str2, '\n', 4) == str2 + 9);
assert_true(str_n_substring_beg(str2, '\n', 5) == str2 + 11);
assert_true(str_n_substring_beg(str2, '\n', 6) == NULL);
const char *beg = NULL;
const char *end = NULL;
str_n_substring(empty_str, '\n', 0, &beg, &end);
assert_true(beg == empty_str && end == empty_str + strlen(empty_str));
str_n_substring(empty_str, '\n', 1, &beg, &end);
assert_true(beg == NULL && end == NULL);
str_n_substring(empty_str, '\n', 2, &beg, &end);
assert_true(beg == NULL && end == NULL);
str_n_substring(NULL, '\n', 0, &beg, &end);
assert_true(beg == NULL && end == NULL);
str_n_substring(str, '\n', 0, &beg, &end);
assert_true(beg == str && end == str + 3);
str_n_substring(str, '2', 0, &beg, &end);
assert_true(beg == str && end == str + 1);
str_n_substring(str, '\n', 1, &beg, &end);
assert_true(beg == str +4 && end == str + 8);
str_n_substring(str, '\n', 2, &beg, &end);
assert_true(beg == str + 9 && end == str + strlen(str));
str_n_substring(str, '\n', 3, &beg, &end);
assert_true(beg == NULL && end == NULL);
str_n_substring(str2, '\n', 0, &beg, &end);
assert_true(beg == str2 && end == str2);
str_n_substring(str2, '\n', 1, &beg, &end);
assert_true(beg == str2 + 1 && end == str2 + 4);
str_n_substring(str2, '\n', 2, &beg, &end);
assert_true(beg == str2 + 5 && end == str2 + 7);
str_n_substring(str2, '\n', 3, &beg, &end);
assert_true(beg == str2 + 8 && end == str2 + 8);
str_n_substring(str2, '\n', 4, &beg, &end);
assert_true(beg == str2 + 9 && end == str2 + 10);
str_n_substring(str2, '\n', 5, &beg, &end);
assert_true(beg == str2 + 11 && end == str2 + 11);
str_n_substring(str2, '\n', 6, &beg, &end);
assert_true(beg == NULL && end == NULL);
}
void test_buffer_text_width(void)
{
string_buffer_t *buffer = create_string_buffer(200);
char *old_value = buffer->str;
buffer->str = "";
assert_true(buffer_text_width(buffer) == 0);
buffer->str = "\n\n\n\n";
assert_true(buffer_text_width(buffer) == 0);
buffer->str = "12345";
assert_true(buffer_text_width(buffer) == 5);
buffer->str = "12345\n1234567";
assert_true(buffer_text_width(buffer) == 7);
buffer->str = "12345\n1234567\n";
assert_true(buffer_text_width(buffer) == 7);
buffer->str = "12345\n1234567\n123";
assert_true(buffer_text_width(buffer) == 7);
buffer->str = old_value;
destroy_string_buffer(buffer);
}
void test_buffer_text_height(void)
{
string_buffer_t *buffer = create_string_buffer(200);
char *old_value = buffer->str;
buffer->str = "";
assert_true(buffer_text_height(buffer) == 0);
buffer->str = "\n";
assert_true(buffer_text_height(buffer) == 2);
buffer->str = "\n\n";
assert_true(buffer_text_height(buffer) == 3);
buffer->str = "\n\n\n\n";
assert_true(buffer_text_height(buffer) == 5);
buffer->str = "12345";
assert_true(buffer_text_height(buffer) == 1);
buffer->str = "\n12345";
assert_true(buffer_text_height(buffer) == 2);
buffer->str = "\n12345\n\n2";
assert_true(buffer_text_height(buffer) == 4);
buffer->str = old_value;
destroy_string_buffer(buffer);
}

View File

@@ -94,9 +94,12 @@ void test_table_geometry(void **state)
void test_table_basic(void **state)
{
(void)state;
FTABLE *table = ft_create_table();
FTABLE *table = NULL;
WHEN("All columns are equal and not empty") {
table = ft_create_table();
int n = FT_HDR_PRINTF_LN(table, "%d|%c|%s|%f", 3, 'c', "234", 3.14);
assert_true( n == 4 );
n = FT_PRINTF_LN(table, 1, "%d|%c|%s|%f", 3, 'c', "234", 3.14);
@@ -611,4 +614,41 @@ void test_table_options(void **state)
ft_destroy_table(table);
}
WHEN("All columns are equal and not empty") {
table = ft_create_table();
int n = FT_HDR_PRINTF_LN(table, "%d|%c|%s|%f", 3, 'c', "234", 3.14);
assert_true( n == 4 );
// n = FT_PRINTF_LN(table, 1, "%d|%c|%s|%f", 3, 'c', "234\n123", 3.14);
// assert_true( n == 4 );
// FT_NWRITE_LN(table, "3", "c", "234", "3.140000");
FT_NWRITE_LN(table, "3", "c", "234\n12", "3.140000");
n = FT_PRINTF_LN(table, 2, "%d|%c|%s|%f", 3, 'c', "234", 3.14);
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 | c | 234 | 3.140000 |\n"
"| | | | |\n"
"+---+---+-----+----------+\n"
"| | | | |\n"
"| 3 | c | 234 | 3.140000 |\n"
"| | | 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);
}
}

View File

@@ -16,6 +16,7 @@ void test_table_sizes(void **state);
void test_table_geometry(void **state);
void test_table_basic(void **state);
void test_table_options(void **state);
void test_string_buffer(void **state);
#endif // TESTS_H