[A] Added c++ tests

This commit is contained in:
seleznevae 2018-07-25 22:37:10 +03:00
parent fb6d6c0acc
commit 9bce3f259c
7 changed files with 209 additions and 20 deletions

View File

@ -118,6 +118,14 @@ add_executable(${PROJECT_NAME}_test
${TEST_SOURCES})
set(TEST_SOURCES_CPP
tests/main_test_cpp.cpp
tests/bb_tests_cpp/test_table_basic.cpp
tests/test_utils.c)
add_executable(${PROJECT_NAME}_test_cpp
lib/fort.c
${TEST_SOURCES_CPP})
if(FORT_CXX_BUILD)
SET_SOURCE_FILES_PROPERTIES( ${FORT_DEV_SOURCES} PROPERTIES LANGUAGE CXX)
SET_SOURCE_FILES_PROPERTIES( ${EXAMPLE_SOURCES} PROPERTIES LANGUAGE CXX)

View File

@ -31,6 +31,15 @@ int main()
table.write_ln("4", "2001: A Space Odyssey", "1968", "8.5");
table.write_ln("5", "Blade Runner", "1982", "8.1");
using fort::CellOption;
using fort::TableOption;
table.set_option<CellOption::MinWidth>(0, 0, 20);
table.set_option<CellOption::TextAlign>(0, 0, fort::TextAlign::Left);
table.set_option<CellOption::RowType>(2, FT_ANY_COLUMN, fort::RowType::Header);
table.set_option<TableOption::LeftMargin>(4);
table.set_border_style(FT_SOLID_STYLE);
std::cout << table.to_string();
}

View File

@ -42,6 +42,35 @@ SOFTWARE.
namespace fort
{
enum class CellOption {
MinWidth,
TextAlign,
TopPadding,
BottomPadding,
LeftPadding,
RightPading,
EmptyStrHeight,
RowType
};
enum class TableOption {
LeftMargin,
TopMargin,
RightMargin,
BottomMargin,
};
enum class TextAlign {
Left,
Center,
Right
};
enum class RowType {
Common,
Header
};
class TableManipulator {
public:
explicit TableManipulator(int i)
@ -268,6 +297,54 @@ public:
#endif /* __cpp_variadic_templates */
/**
* Set min width for the specified cell of the table.
*
* @param row
* Cell row.
* @param col
* Cell column.
* @param value
* Value of the min width.
* @return
* - 0: Success; cell option was changed.
* - (<0): In case of error
*/
bool set_cell_min_width(size_t row, size_t col, unsigned value)
{
return FT_IS_SUCCESS(ft_set_cell_option(table, row, col, FT_COPT_MIN_WIDTH, value));
}
/**
* Set bottom padding for the specified cell of the table.
*
* @param row
* Cell row.
* @param col
* Cell column.
* @param value
* Value of the bottom padding.
* @return
* - 0: Success; cell option was changed.
* - (<0): In case of error
*/
bool set_cell_bottom_padding(size_t row, size_t col, unsigned value)
{
return FT_IS_SUCCESS(ft_set_cell_option(table, row, col, FT_COPT_BOTTOM_PADDING, value));
}
template <CellOption option>
bool set_option(size_t row, size_t col, unsigned value);
template <CellOption option>
bool set_option(size_t row, size_t col, TextAlign align);
template <CellOption option>
bool set_option(size_t row, size_t col, RowType rowType);
template <TableOption option>
bool set_option(unsigned value);
/**
* Set border style for the table.
*
@ -282,12 +359,77 @@ public:
return FT_IS_SUCCESS(ft_set_border_style(table, style));
}
/**
* Set default border style for all new formatted tables.
*
* @param style
* Pointer to border style.
* @return
* - True: Success; table border style was changed.
* - False: Error
*/
bool set_default_border_style(struct ft_border_style *style)
{
return FT_IS_SUCCESS(ft_set_default_border_style(style));
}
private:
ft_table_t *table;
std::stringstream stream;
};
/*
* Declare specializations for set_option functions
*/
#define DECLARE_SPECS_FOR_CELL_OPTIONS_X \
SET_CELL_OPTION_SPEC(CellOption::MinWidth, FT_COPT_MIN_WIDTH, unsigned) \
SET_CELL_OPTION_SPEC(CellOption::TextAlign, FT_COPT_TEXT_ALIGN, TextAlign) \
SET_CELL_OPTION_SPEC(CellOption::TopPadding, FT_COPT_TOP_PADDING, unsigned) \
SET_CELL_OPTION_SPEC(CellOption::BottomPadding, FT_COPT_BOTTOM_PADDING, unsigned) \
SET_CELL_OPTION_SPEC(CellOption::LeftPadding, FT_COPT_LEFT_PADDING, unsigned) \
SET_CELL_OPTION_SPEC(CellOption::RightPading, FT_COPT_RIGHT_PADDING, unsigned) \
SET_CELL_OPTION_SPEC(CellOption::EmptyStrHeight, FT_COPT_EMPTY_STR_HEIGHT, unsigned) \
SET_CELL_OPTION_SPEC(CellOption::RowType, FT_COPT_ROW_TYPE, RowType)
#define SET_CELL_OPTION_SPEC(CELL_OPTION, C_OPTION, VALUE_TYPE) \
template <> \
bool Table::set_option<CELL_OPTION>(size_t row, size_t col, VALUE_TYPE value) \
{ \
return FT_IS_SUCCESS(ft_set_cell_option(table, row, col, C_OPTION, static_cast<int>(value))); \
}
DECLARE_SPECS_FOR_CELL_OPTIONS_X
#undef SET_TABLE_OPTION_SPEC
#undef DECLARE_SPECS_FOR_CELL_OPTIONS_X
#define DECLARE_SPECS_FOR_TABLE_OPTIONS_X \
SET_TABLE_OPTION_SPEC(TableOption::LeftMargin, FT_TOPT_LEFT_MARGIN) \
SET_TABLE_OPTION_SPEC(TableOption::TopMargin, FT_TOPT_TOP_MARGIN) \
SET_TABLE_OPTION_SPEC(TableOption::RightMargin, FT_TOPT_RIGHT_MARGIN) \
SET_TABLE_OPTION_SPEC(TableOption::BottomMargin, FT_TOPT_BOTTOM_MARGIN)
#define SET_TABLE_OPTION_SPEC(TABLE_OPTION, TBL_OPTION) \
template <> \
bool Table::set_option<TABLE_OPTION>(unsigned value) \
{ \
return FT_IS_SUCCESS(ft_set_tbl_option(table, TBL_OPTION, static_cast<int>(value))); \
}
DECLARE_SPECS_FOR_TABLE_OPTIONS_X
#undef SET_TABLE_OPTION_SPEC
#undef DECLARE_SPECS_FOR_TABLE_OPTIONS_X
}
#endif // LIBFORT_HPP

View File

@ -2,20 +2,6 @@
#include <stdio.h>
#include "fort.h"
void run_test_suit(const char *test_suit_name, int n_tests, struct test_case test_suit[])
{
fprintf(stderr, " == RUNNING %s ==\n", test_suit_name);
fprintf(stderr, "[==========] Running %d test(s).\n", n_tests);
int i;
for (i = 0; i < n_tests; ++i) {
fprintf(stderr, "[ RUN ] %s\n", test_suit[i].name);
test_suit[i].test();
fprintf(stderr, "[ OK ] %s\n", test_suit[i].name);
}
fprintf(stderr, "[==========] %d test(s) run.\n", n_tests);
fprintf(stderr, "[ PASSED ] %d test(s).\n", n_tests);
}
#ifdef FORT_WB_TESTING_ENABLED
struct test_case wb_test_suit [] = {
{"test_vector_basic", test_vector_basic},

27
tests/main_test_cpp.cpp Normal file
View File

@ -0,0 +1,27 @@
#include "tests.h"
#include <stdio.h>
#include "fort.h"
void test_cpp_table_basic(void);
struct test_case bb_test_suit [] = {
{"test_cpp_table_basic", test_cpp_table_basic},
};
int run_bb_test_suit(void)
{
int bb_n_tests = sizeof(bb_test_suit) / sizeof(bb_test_suit[0]);
run_test_suit("BLACK BOX TEST SUITE", bb_n_tests, bb_test_suit);
return 0;
}
int main(void)
{
int status = 0;
status |= run_bb_test_suit();
return status;
}

View File

@ -132,10 +132,19 @@ struct ft_table *create_test_int_wtable(int set_test_opts)
#endif
void run_test_suit(const char *test_suit_name, int n_tests, struct test_case test_suit[])
{
fprintf(stderr, " == RUNNING %s ==\n", test_suit_name);
fprintf(stderr, "[==========] Running %d test(s).\n", n_tests);
int i;
for (i = 0; i < n_tests; ++i) {
fprintf(stderr, "[ RUN ] %s\n", test_suit[i].name);
test_suit[i].test();
fprintf(stderr, "[ OK ] %s\n", test_suit[i].name);
}
fprintf(stderr, "[==========] %d test(s) run.\n", n_tests);
fprintf(stderr, "[ PASSED ] %d test(s).\n", n_tests);
}

View File

@ -67,11 +67,19 @@ struct test_case {
}
struct ft_table;
#ifdef __cplusplus
extern "C" {
#endif
int set_test_options_for_table(struct ft_table *table);
int set_test_options_as_default(void);
struct ft_table *create_test_int_table(int set_test_opts);
struct ft_table *create_test_int_wtable(int set_test_opts);
void run_test_suit(const char *test_suit_name, int n_tests, struct test_case test_suit[]);
#ifdef __cplusplus
}
#endif
#endif // TESTS_H