Add error reporting/checking

This commit is contained in:
Roberto Alsina 2023-07-13 21:24:37 -03:00
parent 4dcd067ca7
commit 34a16bd6bd
4 changed files with 12 additions and 9 deletions

View File

@ -2,10 +2,8 @@ CC=gcc
all: test
shortcodes.c: shortcodes.rl
ragel -G2 -L shortcodes.rl -o shortcodes.c
%.o: %.c
$(CC) -fPIC -c -o $@ $^ -g
tests.so: shortcodes.o tests.o
$(CC) -shared -g -o $@ $^ -lbg -lcgreen
tests.so: shortcodes.c tests.c
$(CC) -fPIC -shared -g -o $@ $^ -lbg -lcgreen
clean:
rm -f shortcodes.c *.o *.so tests
test: tests.so

View File

@ -1,5 +1,4 @@
#ifndef SHORTCODES_H
#define SHORTCODES_H
#pragma once
// A chunk is a reference to a piece of string
// from "start" relative to its start
@ -46,9 +45,8 @@ Example:
{{% foo %}} {{% /bar %}}
*/
#define ERR_MISMATCHED_CLOSING_TAG 1;
#define ERR_MISMATCHED_CLOSING_TAG 1
#define ERR_MISMATCHED_BRACKET 2
sc_result parse(char *);
#endif

View File

@ -58,6 +58,9 @@
// Since it's mismatched, remove the name
sc_list[c_sc].name.start = 0;
sc_list[c_sc].name.len=0;
result.errors[result.errcount].position = p-start-2;
result.errors[result.errcount].code = ERR_MISMATCHED_BRACKET;
result.errcount++;
};
shortcode = ((start_p content end_p) | (start_b content end_b))

View File

@ -45,6 +45,10 @@ Ensure(parse, mismatched_brackets)
result = parse(input);
// No shortcodes
assert_that(result.sc[0].name.len, is_equal_to(0));
assert_that(result.errcount, is_equal_to(1));
assert_that(result.errors[0].code, is_equal_to(ERR_MISMATCHED_BRACKET));
str_copyb(&s, input + result.errors[0].position, 3);
assert_that(s.s, is_equal_to_string(">}}"));
}
Ensure(parse, mismatched_brackets_inside_data_are_ok)