|
|
#include "../../unity/unity.h" |
|
|
#include <stdint.h> |
|
|
#include <stdbool.h> |
|
|
#include <string.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static mcel_t make_mcel(uint32_t ch, int len) |
|
|
{ |
|
|
mcel_t g; |
|
|
|
|
|
memset(&g, 0, sizeof(g)); |
|
|
g.ch = ch; |
|
|
g.len = len; |
|
|
return g; |
|
|
} |
|
|
|
|
|
void setUp(void) { |
|
|
|
|
|
counting_mode = COUNT_COLUMNS; |
|
|
last_character_width = 0; |
|
|
} |
|
|
|
|
|
void tearDown(void) { |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
void test_adjust_column_columns_regular_char_increments_and_sets_last_width(void) |
|
|
{ |
|
|
size_t start = 0; |
|
|
mcel_t g = make_mcel('a', 1); |
|
|
size_t col = adjust_column(start, g); |
|
|
TEST_ASSERT_EQUAL_UINT64(1, col); |
|
|
TEST_ASSERT_EQUAL_INT(1, last_character_width); |
|
|
} |
|
|
|
|
|
|
|
|
void test_adjust_column_backspace_decrements_by_last_width_when_column_gt0(void) |
|
|
{ |
|
|
size_t start = 5; |
|
|
last_character_width = 3; |
|
|
mcel_t g = make_mcel('\b', 1); |
|
|
size_t col = adjust_column(start, g); |
|
|
TEST_ASSERT_EQUAL_UINT64(2, col); |
|
|
|
|
|
TEST_ASSERT_EQUAL_INT(3, last_character_width); |
|
|
} |
|
|
|
|
|
|
|
|
void test_adjust_column_backspace_no_effect_when_column_zero(void) |
|
|
{ |
|
|
size_t start = 0; |
|
|
last_character_width = 4; |
|
|
mcel_t g = make_mcel('\b', 1); |
|
|
size_t col = adjust_column(start, g); |
|
|
TEST_ASSERT_EQUAL_UINT64(0, col); |
|
|
TEST_ASSERT_EQUAL_INT(4, last_character_width); |
|
|
} |
|
|
|
|
|
|
|
|
void test_adjust_column_carriage_return_resets_column(void) |
|
|
{ |
|
|
size_t start = 10; |
|
|
mcel_t g = make_mcel('\r', 1); |
|
|
size_t col = adjust_column(start, g); |
|
|
TEST_ASSERT_EQUAL_UINT64(0, col); |
|
|
} |
|
|
|
|
|
|
|
|
void test_adjust_column_tab_from_zero_advances_to_8(void) |
|
|
{ |
|
|
size_t start = 0; |
|
|
mcel_t g = make_mcel('\t', 1); |
|
|
size_t col = adjust_column(start, g); |
|
|
TEST_ASSERT_EQUAL_UINT64(TAB_WIDTH, col); |
|
|
} |
|
|
|
|
|
|
|
|
void test_adjust_column_tab_from_7_advances_to_8(void) |
|
|
{ |
|
|
size_t start = 7; |
|
|
mcel_t g = make_mcel('\t', 1); |
|
|
size_t col = adjust_column(start, g); |
|
|
TEST_ASSERT_EQUAL_UINT64(8, col); |
|
|
} |
|
|
|
|
|
|
|
|
void test_adjust_column_tab_from_8_advances_to_16(void) |
|
|
{ |
|
|
size_t start = 8; |
|
|
mcel_t g = make_mcel('\t', 1); |
|
|
size_t col = adjust_column(start, g); |
|
|
TEST_ASSERT_EQUAL_UINT64(16, col); |
|
|
} |
|
|
|
|
|
|
|
|
void test_adjust_column_characters_mode_counts_one_and_sets_last_width(void) |
|
|
{ |
|
|
counting_mode = COUNT_CHARACTERS; |
|
|
size_t start = 3; |
|
|
|
|
|
mcel_t g = make_mcel('X', 1); |
|
|
size_t col = adjust_column(start, g); |
|
|
TEST_ASSERT_EQUAL_UINT64(4, col); |
|
|
TEST_ASSERT_EQUAL_INT(1, last_character_width); |
|
|
} |
|
|
|
|
|
|
|
|
void test_adjust_column_bytes_mode_counts_len_and_preserves_last_width(void) |
|
|
{ |
|
|
counting_mode = COUNT_BYTES; |
|
|
last_character_width = 4; |
|
|
size_t start = 5; |
|
|
|
|
|
mcel_t g = make_mcel('\t', 1); |
|
|
size_t col = adjust_column(start, g); |
|
|
TEST_ASSERT_EQUAL_UINT64(6, col); |
|
|
TEST_ASSERT_EQUAL_INT(4, last_character_width); |
|
|
} |
|
|
|
|
|
|
|
|
void test_adjust_column_bytes_mode_multibyte_len(void) |
|
|
{ |
|
|
counting_mode = COUNT_BYTES; |
|
|
size_t start = 2; |
|
|
mcel_t g = make_mcel('x', 4); |
|
|
size_t col = adjust_column(start, g); |
|
|
TEST_ASSERT_EQUAL_UINT64(6, col); |
|
|
} |
|
|
|
|
|
|
|
|
void test_adjust_column_invalid_codepoint_defaults_to_one(void) |
|
|
{ |
|
|
counting_mode = COUNT_COLUMNS; |
|
|
size_t start = 10; |
|
|
|
|
|
mcel_t g = make_mcel(0xD800u, 3); |
|
|
size_t col = adjust_column(start, g); |
|
|
TEST_ASSERT_EQUAL_UINT64(11, col); |
|
|
TEST_ASSERT_EQUAL_INT(1, last_character_width); |
|
|
} |
|
|
|
|
|
int main(void) |
|
|
{ |
|
|
UNITY_BEGIN(); |
|
|
RUN_TEST(test_adjust_column_columns_regular_char_increments_and_sets_last_width); |
|
|
RUN_TEST(test_adjust_column_backspace_decrements_by_last_width_when_column_gt0); |
|
|
RUN_TEST(test_adjust_column_backspace_no_effect_when_column_zero); |
|
|
RUN_TEST(test_adjust_column_carriage_return_resets_column); |
|
|
RUN_TEST(test_adjust_column_tab_from_zero_advances_to_8); |
|
|
RUN_TEST(test_adjust_column_tab_from_7_advances_to_8); |
|
|
RUN_TEST(test_adjust_column_tab_from_8_advances_to_16); |
|
|
RUN_TEST(test_adjust_column_characters_mode_counts_one_and_sets_last_width); |
|
|
RUN_TEST(test_adjust_column_bytes_mode_counts_len_and_preserves_last_width); |
|
|
RUN_TEST(test_adjust_column_bytes_mode_multibyte_len); |
|
|
RUN_TEST(test_adjust_column_invalid_codepoint_defaults_to_one); |
|
|
return UNITY_END(); |
|
|
} |