aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/test_reader.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/test/test_reader.c b/test/test_reader.c
index dd090d83..b5cefbe1 100644
--- a/test/test_reader.c
+++ b/test/test_reader.c
@@ -3,12 +3,16 @@
#undef NDEBUG
+#include "serd/caret.h"
#include "serd/event.h"
#include "serd/input_stream.h"
+#include "serd/node.h"
#include "serd/reader.h"
#include "serd/sink.h"
+#include "serd/statement.h"
#include "serd/status.h"
#include "serd/stream.h"
+#include "serd/string_view.h"
#include "serd/syntax.h"
#include "serd/world.h"
#include "zix/allocator.h"
@@ -21,6 +25,7 @@
#endif
#include <assert.h>
+#include <stdbool.h>
#include <stdio.h>
#include <string.h>
@@ -486,6 +491,56 @@ test_read_empty(const char* const path)
serd_world_free(world);
}
+static SerdStatus
+check_cursor(void* handle, const SerdEvent* event)
+{
+ bool* const called = (bool*)handle;
+
+ if (event->type == SERD_STATEMENT) {
+ const SerdCaret* const caret =
+ serd_statement_caret(event->statement.statement);
+ assert(caret);
+
+ assert(!strcmp(serd_node_string(serd_caret_document(caret)), "string"));
+ assert(serd_caret_line(caret) == 1);
+ assert(serd_caret_column(caret) == 47);
+ }
+
+ *called = true;
+ return SERD_SUCCESS;
+}
+
+static void
+test_error_cursor(void)
+{
+ SerdWorld* world = serd_world_new();
+ bool called = false;
+ SerdSink* sink = serd_sink_new(&called, check_cursor, NULL);
+ SerdReader* const reader = serd_reader_new(world, SERD_TURTLE, 0, sink);
+ assert(sink);
+ assert(reader);
+
+ static const char* const string =
+ "<http://example.org/s> <http://example.org/p> "
+ "<http://example.org/o> .";
+
+ SerdNode* const string_name = serd_new_string(serd_string("string"));
+ const char* position = string;
+ SerdInputStream in = serd_open_input_string(&position);
+
+ SerdStatus st = serd_reader_start(reader, &in, string_name, 1);
+ assert(!st);
+ assert(serd_reader_read_document(reader) == SERD_SUCCESS);
+ assert(!serd_reader_finish(reader));
+ assert(called);
+ assert(!serd_close_input(&in));
+
+ serd_node_free(string_name);
+ serd_reader_free(reader);
+ serd_sink_free(sink);
+ serd_world_free(world);
+}
+
int
main(void)
{
@@ -504,6 +559,7 @@ main(void)
test_read_nquads_chunks(nq_path);
test_read_turtle_chunks(ttl_path);
test_read_empty(ttl_path);
+ test_error_cursor();
assert(!zix_remove(dir));