From: Kevin Day Date: Thu, 20 Aug 2026 02:04:13 +0000 (-0500) Subject: Progress: Wrap up the basic object read changes. X-Git-Url: https://www.git.kevux.org/?a=commitdiff_plain;h=a83305316e28b1508b8e82a49e469ca81e370362;p=fll Progress: Wrap up the basic object read changes. Fix a mistake where an invalid quote is being incorrectly designated as valid. Fix mistake in `matches/basic-combining_read.txt` where content should not be found so value is 1 rather than 2. The start of a combining or joining character in `objects/basic-combining_read.txt` is correctly not valid UTF-8 line starter. Add a preceding space to make it valid and ensure that the test passes. (This test happened to be correctly failing due to not having a non-combinig/non-joiner as the first character.) Add additional status information to some tests. Fix problem inn tests where its failing due to `getline()` reaching the end of the line. If the EOL is reached, then the loop must end. --- diff --git a/level_1/fl_fss/c/private-fss.c b/level_1/fl_fss/c/private-fss.c index 208b1d477..9bbb12052 100644 --- a/level_1/fl_fss/c/private-fss.c +++ b/level_1/fl_fss/c/private-fss.c @@ -537,21 +537,13 @@ extern "C" { } else { state->status = F_true; - range->start = previous; } } else { if (F_status_is_error(state->status)) return; - if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) { - state->status = F_false; - } - else { - if (F_status_is_error(state->status)) return; - - state->status = F_true; - range->start = previous; - } + // Designate that this is not a valid quote. + state->status = F_false; } } else { @@ -559,7 +551,6 @@ extern "C" { // EOS or EOL was reached, so it is a valid closing quote. // (for EOL, this is always TRUE, for EOS this could be false but there is no way to know this, so assume TRUE.) state->status = F_true; - range->start = location; } range->start = location; diff --git a/level_1/fl_fss/data/tests/matches/basic-combining_read.txt b/level_1/fl_fss/data/tests/matches/basic-combining_read.txt index 8a23f1a08..87000e719 100644 --- a/level_1/fl_fss/data/tests/matches/basic-combining_read.txt +++ b/level_1/fl_fss/data/tests/matches/basic-combining_read.txt @@ -1,6 +1,6 @@ 2 2 1 -2 +1 2 2 diff --git a/level_1/fl_fss/data/tests/objects/basic-combining_read.txt b/level_1/fl_fss/data/tests/objects/basic-combining_read.txt index 839e3bfba..7ed2a8697 100644 --- a/level_1/fl_fss/data/tests/objects/basic-combining_read.txt +++ b/level_1/fl_fss/data/tests/objects/basic-combining_read.txt @@ -1,6 +1,6 @@ first is_second -́ + ́ fourth ͜no_space fifth sixtẖ̚ diff --git a/level_1/fl_fss/data/tests/strings/basic-combining_read.txt b/level_1/fl_fss/data/tests/strings/basic-combining_read.txt index fe24da37d..d2132bf51 100644 --- a/level_1/fl_fss/data/tests/strings/basic-combining_read.txt +++ b/level_1/fl_fss/data/tests/strings/basic-combining_read.txt @@ -1,6 +1,6 @@ first valid. is_second and does not have embedded new line. -́ + ́ fourth ͜no_space fifth is valid. sixtẖ̚ is valid with two combiners. diff --git a/level_1/fl_fss/tests/unit/c/test-fss-basic_content_read.c b/level_1/fl_fss/tests/unit/c/test-fss-basic_content_read.c index c71db0cd7..ec7a640a6 100644 --- a/level_1/fl_fss/tests/unit/c/test-fss-basic_content_read.c +++ b/level_1/fl_fss/tests/unit/c/test-fss-basic_content_read.c @@ -106,12 +106,13 @@ void test__fl_fss_basic_content_read__works(void **void_state) { f_range_t found_object = f_range_t_initialize; f_ranges_t found = f_ranges_t_initialize; uint8_t quote = 0; + f_number_unsigned_t line = 0; f_number_unsigneds_t delimits = f_number_unsigneds_t_initialize; f_string_dynamic_t result_string = f_string_dynamic_t_initialize; f_string_dynamic_t delimit_string = f_string_dynamic_t_initialize; f_status_t status_object = F_okay; - for (;;) { + for (;; ++line) { max = 255; @@ -125,6 +126,11 @@ void test__fl_fss_basic_content_read__works(void **void_state) { max = 255; result = getline(&line_content, &max, file_contents); + + if (!result) { + printf("[ -------> ] --- [00] Failure with line (%lu) '%s', result = %zd, for loading file='./data/tests/%s/%s-%s.txt'.\n", line, line_content, result, "strings", "basic", "all_read"); + } + assert_return_code(result, 0); // The newline is copied by getline(), and so remove that newline before comparing. @@ -138,6 +144,10 @@ void test__fl_fss_basic_content_read__works(void **void_state) { fl_fss_basic_object_read(buffer_string, &range, &found_object, "e, &delimits, &state); + if (!(state.status == F_fss_found_object || state.status == F_fss_found_object_content_not)) { + printf("[ -------> ] --- [01] Failure with line (%lu) '%s', status = %u, expecting %u or %u.\n", line, line_content, state.status, F_fss_found_object, F_fss_found_object_content_not); + } + assert_true(state.status == F_fss_found_object || state.status == F_fss_found_object_content_not); status_object = state.status; @@ -146,38 +156,78 @@ void test__fl_fss_basic_content_read__works(void **void_state) { fl_fss_basic_content_read(buffer_string, &range, &found, &delimits, &state); if (status_object == F_fss_found_object) { + if (state.status != F_fss_found_content) { + printf("[ -------> ] --- [02] Failure with line (%lu) '%s', status = %u, expecting %u.\n", line, line_content, state.status, F_fss_found_content); + } + assert_int_equal(state.status, F_fss_found_content); } else { + if (state.status != F_data_not) { + printf("[ -------> ] --- [03] Failure with line (%lu) '%s', status = %u, expecting %u.\n", line, line_content, state.status, F_data_not); + } + assert_int_equal(state.status, F_data_not); } if (state.status == F_fss_found_content) { + if (!found.used) { + printf("[ -------> ] --- [04] Failure with line (%lu) '%s', found.used = %lu, expecting found.used <> 0.\n", line, line_content, found.used); + } + assert_true(found.used); { const f_status_t status = f_string_dynamic_append(buffer_string, &delimit_string); + + if (status != F_okay) { + printf("[ -------> ] --- [05] Failure with line (%lu) '%s', status = %u, expecting %u.\n", line, line_content, state.status, F_okay); + } + assert_int_equal(status, F_okay); } state.status = F_none; f_fss_apply_delimit(delimits, &delimit_string, &state); + + if (state.status != F_okay) { + printf("[ -------> ] --- [06] Failure with line (%lu) '%s', status = %u, expecting %u.\n", line, line_content, state.status, F_okay); + } + assert_int_equal(state.status, F_okay); { const f_status_t status = f_string_dynamic_partial_append_nulless(delimit_string, found.array[0], &result_string); + + if (!(status == F_okay || status == F_data_not_eos)) { + printf("[ -------> ] --- [07] Failure with line (%lu) '%s', status = %u, expecting %u or %u.\n", line, line_content, state.status, F_okay, F_data_not_eos); + } + assert_true(status == F_okay || status == F_data_not_eos); } { const f_status_t status = f_string_dynamic_terminate_after(&result_string); + + if (status != F_okay) { + printf("[ -------> ] --- [08] Failure with line (%lu) '%s', status = %u, expecting %u.\n", line, line_content, state.status, F_okay); + } + assert_int_equal(status, F_okay); } + if (state.status != F_okay) { + printf("[ -------> ] --- [09] Failure with line (%lu) '%s', '%s' does not match '%s', line_content.\n", line, line_content, result_string.string, line_content); + } + assert_string_equal(result_string.string, line_content); } else { + if (found.used) { + printf("[ -------> ] --- [10] Failure with line (%lu) '%s', found.used = %lu, expecting found.used == 0.\n", line, line_content, found.used); + } + assert_true(!found.used); } @@ -242,17 +292,18 @@ void test__fl_fss_basic_content_read__works_using_combining(void **void_state) { f_range_t found_object = f_range_t_initialize; f_ranges_t found = f_ranges_t_initialize; uint8_t quote = 0; + f_number_unsigned_t line = 0; f_number_unsigneds_t delimits = f_number_unsigneds_t_initialize; f_string_dynamic_t result_string = f_string_dynamic_t_initialize; f_string_dynamic_t delimit_string = f_string_dynamic_t_initialize; f_status_t status_object = F_okay; - for (;;) { + for (;; ++line) { max = 255; result = getline(&line_matches, &max, file_matches); - assert_return_code(result, 0); + if (result == -1) break; matches = atoi(line_matches); @@ -285,7 +336,7 @@ void test__fl_fss_basic_content_read__works_using_combining(void **void_state) { // When matches is 2, then this matches both object and content. if (matches == 2) { if (!(state.status == F_fss_found_object)) { - printf("[ -------> ] --- [00] Failure with line '%s', matches=%d, status=%u.\n", line_content, matches, state.status); + printf("[ -------> ] --- [00] Failure with line (%lu) '%s', matches=%d, status=%u, expected %u.\n", line, line_content, matches, state.status, F_fss_found_object); } assert_true(state.status == F_fss_found_object); @@ -294,7 +345,7 @@ void test__fl_fss_basic_content_read__works_using_combining(void **void_state) { // When matches is 1, then this matches only object. else { if (!(state.status == F_fss_found_object_content_not)) { - printf("[ -------> ] --- [02] Failure with line '%s', matches=%d, status=%u.\n", line_content, matches, state.status); + printf("[ -------> ] --- [01] Failure with line (%lu) '%s', matches=%d, status=%u, expected %u.\n", line, line_content, matches, state.status, F_fss_found_object_content_not); } assert_true(state.status == F_fss_found_object_content_not); @@ -312,15 +363,15 @@ void test__fl_fss_basic_content_read__works_using_combining(void **void_state) { fl_fss_basic_content_read(buffer_string, &range, &found, &delimits, &state); if (status_object == F_fss_found_object) { - if (!(status_object == F_fss_found_object)) { - printf("[ -------> ] --- [02] Failure with line '%s'.\n", line_content); + if (status_object != F_fss_found_object) { + printf("[ -------> ] --- [02] Failure with line (%lu) '%s', expected %u.\n", line, line_content, F_fss_found_object); } assert_int_equal(state.status, F_fss_found_content); } else { if (state.status != F_data_not) { - printf("[ -------> ] --- [03] Failure with line '%s'.\n", line_content); + printf("[ -------> ] --- [03] Failure with line (%lu) '%s', expected %u.\n", line, line_content, F_data_not); } assert_int_equal(state.status, F_data_not); @@ -329,7 +380,7 @@ void test__fl_fss_basic_content_read__works_using_combining(void **void_state) { if (matches == 2) { if (state.status == F_fss_found_content) { if (!found.used) { - printf("[ -------> ] --- [04] Failure with line '%s'.\n", line_content); + printf("[ -------> ] --- [04] Failure with line (%lu) '%s', expected found.used <> 0.\n", line, line_content); } assert_true(found.used); @@ -338,7 +389,7 @@ void test__fl_fss_basic_content_read__works_using_combining(void **void_state) { const f_status_t status = f_string_dynamic_append(buffer_string, &delimit_string); if (status != F_okay) { - printf("[ -------> ] --- [05] Failure with line '%s'.\n", line_content); + printf("[ -------> ] --- [05] Failure with line (%lu) '%s', expected %u.\n", line, line_content, F_okay); } assert_int_equal(status, F_okay); @@ -353,7 +404,7 @@ void test__fl_fss_basic_content_read__works_using_combining(void **void_state) { const f_status_t status = f_string_dynamic_partial_append_nulless(delimit_string, found.array[0], &result_string); if (!(status == F_okay || status == F_data_not_eos)) { - printf("[ -------> ] --- [06] Failure with line '%s', status=%u.\n", line_content, status); + printf("[ -------> ] --- [06] Failure with line (%lu) '%s', status=%u, expected %u or %#0x.\n", line, line_content, status, F_okay, F_data_not_eos); } assert_true(status == F_okay || status == F_data_not_eos); @@ -363,21 +414,21 @@ void test__fl_fss_basic_content_read__works_using_combining(void **void_state) { const f_status_t status = f_string_dynamic_terminate_after(&result_string); if (status != F_okay) { - printf("[ -------> ] --- [07] Failure with line '%s'.\n", line_content); + printf("[ -------> ] --- [07] Failure with line (%lu) '%s', expected %u.\n", line, line_content, F_okay); } assert_int_equal(status, F_okay); } if (strcmp((const char *) result_string.string, (const char *) line_content)) { - printf("[ -------> ] --- [08] Failure with line '%s'; got '%s', expected '%s'.\n", line_content, result_string.string, line_content); + printf("[ -------> ] --- [08] Failure with line (%lu) '%s', got '%s', expected '%s'.\n", line, line_content, result_string.string, line_content); } assert_string_equal(result_string.string, line_content); } else { if (found.used) { - printf("[ -------> ] --- [09] Failure with line '%s'.\n", line_content); + printf("[ -------> ] --- [09] Failure with line (%lu) '%s', expected found.used == 0.\n", line, line_content); } assert_true(!found.used); diff --git a/level_1/fl_fss/tests/unit/c/test-fss-basic_object_read.c b/level_1/fl_fss/tests/unit/c/test-fss-basic_object_read.c index 633ac7af4..fad3365b1 100644 --- a/level_1/fl_fss/tests/unit/c/test-fss-basic_object_read.c +++ b/level_1/fl_fss/tests/unit/c/test-fss-basic_object_read.c @@ -275,7 +275,7 @@ void test__fl_fss_basic_object_read__works_using_combining(void **void_state) { max = 255; result = getline(&line_matches, &max, file_matches); - assert_return_code(result, 0); + if (result == -1) break; matches = atoi(line_matches);