Report prescan errors on their source lines
Some checks failed
akbasic CI Build / coverage (push) Failing after 27s
akbasic CI Build / cmake_build (push) Failing after 33s
akbasic CI Build / akgl_build (push) Failing after 18s
akbasic CI Build / sanitizers (push) Failing after 1m7s
akbasic CI Build / mutation_test (push) Failing after 39s
Some checks failed
akbasic CI Build / coverage (push) Failing after 27s
akbasic CI Build / cmake_build (push) Failing after 33s
akbasic CI Build / akgl_build (push) Failing after 18s
akbasic CI Build / sanitizers (push) Failing after 1m7s
akbasic CI Build / mutation_test (push) Failing after 39s
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
* TODO.md section 6.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <akbasic/error.h>
|
||||
@@ -174,6 +175,34 @@ static void test_colon_ends_data(void)
|
||||
harness_stop();
|
||||
}
|
||||
|
||||
/** @brief DATA overflow reports the line where the item limit was crossed. */
|
||||
static void test_data_prescan_error_line(void)
|
||||
{
|
||||
char source[4096] = "";
|
||||
size_t used = 0;
|
||||
int line = 0;
|
||||
int item = 0;
|
||||
|
||||
for ( line = 1; line <= 34; line++ ) {
|
||||
used += (size_t)snprintf(source + used, sizeof(source) - used, "%d DATA ", line);
|
||||
for ( item = 0; item < 15; item++ ) {
|
||||
used += (size_t)snprintf(source + used, sizeof(source) - used,
|
||||
"%s1", (item == 0 ? "" : ","));
|
||||
}
|
||||
used += (size_t)snprintf(source + used, sizeof(source) - used, "\n");
|
||||
}
|
||||
used += (size_t)snprintf(source + used, sizeof(source) - used, "100 DATA 1,1\n");
|
||||
(void)snprintf(source + used, sizeof(source) - used, "101 DATA 1\n200 PRINT 1\n");
|
||||
|
||||
TEST_REQUIRE_OK(harness_start(NULL));
|
||||
TEST_REQUIRE_OK(akbasic_runtime_load(&HARNESS_RUNTIME, source));
|
||||
TEST_REQUIRE_OK(akbasic_runtime_start(&HARNESS_RUNTIME, AKBASIC_MODE_RUN));
|
||||
TEST_REQUIRE(strstr(HARNESS_OUTPUT, "? 101 : PARSE ERROR") != NULL,
|
||||
"DATA overflow should report its source line, got \"%s\"",
|
||||
HARNESS_OUTPUT);
|
||||
harness_stop();
|
||||
}
|
||||
|
||||
/** @brief A float item fills a float variable with its fractional part intact. */
|
||||
static void test_float_items(void)
|
||||
{
|
||||
@@ -227,6 +256,7 @@ int main(void)
|
||||
test_type_mismatch();
|
||||
test_quoted_items();
|
||||
test_colon_ends_data();
|
||||
test_data_prescan_error_line();
|
||||
test_float_items();
|
||||
test_negative_items();
|
||||
return akbasic_test_failures;
|
||||
|
||||
Reference in New Issue
Block a user