]> Kevux Git Server - fll/commitdiff
Progress: Wrap up the basic object read changes.
authorKevin Day <Kevin@kevux.org>
Thu, 20 Aug 2026 02:04:13 +0000 (21:04 -0500)
committerKevin Day <Kevin@kevux.org>
Thu, 20 Aug 2026 02:04:13 +0000 (21:04 -0500)
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.

level_1/fl_fss/c/private-fss.c
level_1/fl_fss/data/tests/matches/basic-combining_read.txt
level_1/fl_fss/data/tests/objects/basic-combining_read.txt
level_1/fl_fss/data/tests/strings/basic-combining_read.txt
level_1/fl_fss/tests/unit/c/test-fss-basic_content_read.c
level_1/fl_fss/tests/unit/c/test-fss-basic_object_read.c

index 208b1d477e10fe730ccc16f20ac8dec0d4b65e63..9bbb12052bd18b28c09add3cf3fefc57de8437ad 100644 (file)
@@ -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;
index 8a23f1a081f15554331c38a940830bb8ac935a29..87000e719f54712e0aa51f901acafc4891c18c71 100644 (file)
@@ -1,6 +1,6 @@
 2
 2
 1
-2
+1
 2
 2
index 839e3bfba5209bb87ed7f6beb0101004df77e4c5..7ed2a8697e11ecea543055ff7249a5d8de43237a 100644 (file)
@@ -1,6 +1,6 @@
 first
 is_second
+ ́
 fourth ͜no_space
 fifth
 sixtẖ̚
index fe24da37d86c3c6f8dc8fbe5c181ad0938a97ad5..d2132bf517b75ecd3a1e26de6bd8092901efb2a8 100644 (file)
@@ -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.
index c71db0cd7860a9aacf774a308148210fd381c521..ec7a640a68678a296a6bf97578c571613a40fbfc 100644 (file)
@@ -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, &quote, &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);
index 633ac7af46aab6c1750abd9c294659f25e897a71..fad3365b1b14539473e1f1a484d42813b3489666 100644 (file)
@@ -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);