aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--test/meson.build1
-rw-r--r--test/test_read_chunk.c109
-rw-r--r--test/test_reader_writer.c152
3 files changed, 119 insertions, 143 deletions
diff --git a/test/meson.build b/test/meson.build
index 3980538d..8b034b26 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -41,7 +41,6 @@ unit_tests = [
'env',
'free_null',
'node',
- 'read_chunk',
'reader_writer',
'string',
'uri',
diff --git a/test/test_read_chunk.c b/test/test_read_chunk.c
deleted file mode 100644
index 3db7f525..00000000
--- a/test/test_read_chunk.c
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2018-2020 David Robillard <d@drobilla.net>
-// SPDX-License-Identifier: ISC
-
-#undef NDEBUG
-
-#include "serd/serd.h"
-
-#include <assert.h>
-#include <stdbool.h>
-#include <stdio.h>
-
-static size_t n_base = 0;
-static size_t n_prefix = 0;
-static size_t n_statement = 0;
-static size_t n_end = 0;
-
-static SerdStatus
-on_base(void* handle, const SerdNode* uri)
-{
- (void)handle;
- (void)uri;
-
- ++n_base;
- return SERD_SUCCESS;
-}
-
-static SerdStatus
-on_prefix(void* handle, const SerdNode* name, const SerdNode* uri)
-{
- (void)handle;
- (void)name;
- (void)uri;
-
- ++n_prefix;
- return SERD_SUCCESS;
-}
-
-static SerdStatus
-on_statement(void* handle,
- SerdStatementFlags flags,
- const SerdNode* graph,
- const SerdNode* subject,
- const SerdNode* predicate,
- const SerdNode* object,
- const SerdNode* object_datatype,
- const SerdNode* object_lang)
-{
- (void)handle;
- (void)flags;
- (void)graph;
- (void)subject;
- (void)predicate;
- (void)object;
- (void)object_datatype;
- (void)object_lang;
-
- ++n_statement;
- return SERD_SUCCESS;
-}
-
-static SerdStatus
-on_end(void* handle, const SerdNode* node)
-{
- (void)handle;
- (void)node;
-
- ++n_end;
- return SERD_SUCCESS;
-}
-
-int
-main(void)
-{
- FILE* file = tmpfile();
-
- fprintf(file,
- "@prefix eg: <http://example.org/> .\n"
- "@base <http://example.org/base> .\n"
- "eg:s1 eg:p1 eg:o1 ;\n"
- " eg:p2 eg:o2 ,\n"
- " eg:o3 .\n"
- "eg:s2 eg:p1 eg:o1 ;\n"
- " eg:p2 eg:o2 .\n"
- "eg:s3 eg:p1 eg:o1 .\n"
- "eg:s4 eg:p1 [ eg:p3 eg:o1 ] .\n");
-
- fseek(file, 0, SEEK_SET);
-
- SerdReader* reader = serd_reader_new(
- SERD_TURTLE, NULL, NULL, on_base, on_prefix, on_statement, on_end);
-
- assert(reader);
- assert(!serd_reader_start_stream(reader, file, NULL, true));
-
- assert(!serd_reader_read_chunk(reader) && n_prefix == 1);
- assert(!serd_reader_read_chunk(reader) && n_base == 1);
- assert(!serd_reader_read_chunk(reader) && n_statement == 3);
- assert(!serd_reader_read_chunk(reader) && n_statement == 5);
- assert(!serd_reader_read_chunk(reader) && n_statement == 6);
- assert(!serd_reader_read_chunk(reader) && n_statement == 8 && n_end == 1);
- assert(serd_reader_read_chunk(reader) == SERD_FAILURE);
- assert(serd_reader_read_chunk(reader) == SERD_FAILURE);
-
- assert(!serd_reader_end_stream(reader));
- serd_reader_free(reader);
- fclose(file);
-
- return 0;
-}
diff --git a/test/test_reader_writer.c b/test/test_reader_writer.c
index 46c6297b..e93a7942 100644
--- a/test/test_reader_writer.c
+++ b/test/test_reader_writer.c
@@ -15,19 +15,43 @@
#define USTR(s) ((const uint8_t*)(s))
typedef struct {
- int n_statements;
+ int n_base;
+ int n_prefix;
+ int n_statement;
+ int n_end;
const SerdNode* graph;
} ReaderTest;
static SerdStatus
-test_sink(void* handle,
- SerdStatementFlags flags,
- const SerdNode* graph,
- const SerdNode* subject,
- const SerdNode* predicate,
- const SerdNode* object,
- const SerdNode* object_datatype,
- const SerdNode* object_lang)
+test_base_sink(void* handle, const SerdNode* uri)
+{
+ (void)uri;
+
+ ReaderTest* rt = (ReaderTest*)handle;
+ ++rt->n_base;
+ return SERD_SUCCESS;
+}
+
+static SerdStatus
+test_prefix_sink(void* handle, const SerdNode* name, const SerdNode* uri)
+{
+ (void)name;
+ (void)uri;
+
+ ReaderTest* rt = (ReaderTest*)handle;
+ ++rt->n_prefix;
+ return SERD_SUCCESS;
+}
+
+static SerdStatus
+test_statement_sink(void* handle,
+ SerdStatementFlags flags,
+ const SerdNode* graph,
+ const SerdNode* subject,
+ const SerdNode* predicate,
+ const SerdNode* object,
+ const SerdNode* object_datatype,
+ const SerdNode* object_lang)
{
(void)flags;
(void)subject;
@@ -37,11 +61,21 @@ test_sink(void* handle,
(void)object_lang;
ReaderTest* rt = (ReaderTest*)handle;
- ++rt->n_statements;
+ ++rt->n_statement;
rt->graph = graph;
return SERD_SUCCESS;
}
+static SerdStatus
+test_end_sink(void* handle, const SerdNode* node)
+{
+ (void)node;
+
+ ReaderTest* rt = (ReaderTest*)handle;
+ ++rt->n_end;
+ return SERD_SUCCESS;
+}
+
/// Reads a null byte after a statement, then succeeds again (like a socket)
static size_t
eof_test_read(void* buf, size_t size, size_t nmemb, void* stream)
@@ -89,11 +123,16 @@ eof_test_error(void* stream)
static void
test_read_chunks(void)
{
- ReaderTest* const rt = (ReaderTest*)calloc(1, sizeof(ReaderTest));
- FILE* const f = tmpfile();
- static const char null = 0;
- SerdReader* const reader =
- serd_reader_new(SERD_TURTLE, rt, free, NULL, NULL, test_sink, NULL);
+ ReaderTest* const rt = (ReaderTest*)calloc(1, sizeof(ReaderTest));
+ FILE* const f = tmpfile();
+ static const char null = 0;
+ SerdReader* const reader = serd_reader_new(SERD_TURTLE,
+ rt,
+ free,
+ test_base_sink,
+ test_prefix_sink,
+ test_statement_sink,
+ test_end_sink);
assert(reader);
assert(serd_reader_get_handle(reader) == rt);
@@ -103,42 +142,72 @@ test_read_chunks(void)
assert(st == SERD_SUCCESS);
// Write two statement separated by null characters
+ fprintf(f, "@base <http://example.org/base/> .\n");
fprintf(f, "@prefix eg: <http://example.org/> .\n");
- fprintf(f, "eg:s eg:p eg:o1 .\n");
+ fprintf(f, "eg:s eg:p1 eg:o1 ;\n");
+ fprintf(f, " eg:p2 eg:o2 .\n");
fwrite(&null, sizeof(null), 1, f);
- fprintf(f, "eg:s eg:p eg:o2 .\n");
+ fprintf(f, "eg:s eg:p [ eg:sp eg:so ] .\n");
fwrite(&null, sizeof(null), 1, f);
fseek(f, 0, SEEK_SET);
+ // Read base
+ st = serd_reader_read_chunk(reader);
+ assert(st == SERD_SUCCESS);
+ assert(rt->n_base == 1);
+ assert(rt->n_prefix == 0);
+ assert(rt->n_statement == 0);
+ assert(rt->n_end == 0);
+
// Read prefix
st = serd_reader_read_chunk(reader);
assert(st == SERD_SUCCESS);
- assert(rt->n_statements == 0);
+ assert(rt->n_base == 1);
+ assert(rt->n_prefix == 1);
+ assert(rt->n_statement == 0);
+ assert(rt->n_end == 0);
- // Read first statement
+ // Read first two statements
st = serd_reader_read_chunk(reader);
assert(st == SERD_SUCCESS);
- assert(rt->n_statements == 1);
+ assert(rt->n_base == 1);
+ assert(rt->n_prefix == 1);
+ assert(rt->n_statement == 2);
+ assert(rt->n_end == 0);
// Read terminator
st = serd_reader_read_chunk(reader);
assert(st == SERD_FAILURE);
- assert(rt->n_statements == 1);
+ assert(rt->n_base == 1);
+ assert(rt->n_prefix == 1);
+ assert(rt->n_statement == 2);
+ assert(rt->n_end == 0);
- // Read second statement (after null terminator)
+ // Read statements after null terminator
st = serd_reader_read_chunk(reader);
assert(st == SERD_SUCCESS);
- assert(rt->n_statements == 2);
+ assert(rt->n_base == 1);
+ assert(rt->n_prefix == 1);
+ assert(rt->n_statement == 4);
+ assert(rt->n_end == 1);
// Read terminator
st = serd_reader_read_chunk(reader);
assert(st == SERD_FAILURE);
- assert(rt->n_statements == 2);
+ assert(rt->n_base == 1);
+ assert(rt->n_prefix == 1);
+ assert(rt->n_statement == 4);
+ assert(rt->n_end == 1);
// EOF
st = serd_reader_read_chunk(reader);
assert(st == SERD_FAILURE);
- assert(rt->n_statements == 2);
+ assert(rt->n_base == 1);
+ assert(rt->n_prefix == 1);
+ assert(rt->n_statement == 4);
+ assert(rt->n_end == 1);
+
+ assert(serd_reader_read_chunk(reader) == SERD_FAILURE);
serd_reader_free(reader);
fclose(f);
@@ -147,9 +216,14 @@ test_read_chunks(void)
static void
test_read_string(void)
{
- ReaderTest* rt = (ReaderTest*)calloc(1, sizeof(ReaderTest));
- SerdReader* reader =
- serd_reader_new(SERD_TURTLE, rt, free, NULL, NULL, test_sink, NULL);
+ ReaderTest* rt = (ReaderTest*)calloc(1, sizeof(ReaderTest));
+ SerdReader* reader = serd_reader_new(SERD_TURTLE,
+ rt,
+ free,
+ test_base_sink,
+ test_prefix_sink,
+ test_statement_sink,
+ test_end_sink);
assert(reader);
assert(serd_reader_get_handle(reader) == rt);
@@ -161,7 +235,10 @@ test_read_string(void)
"<http://example.org/o> ."));
assert(!st);
- assert(rt->n_statements == 1);
+ assert(rt->n_base == 0);
+ assert(rt->n_prefix == 0);
+ assert(rt->n_statement == 1);
+ assert(rt->n_end == 0);
serd_reader_free(reader);
}
@@ -284,9 +361,15 @@ test_writer(const char* const path)
static void
test_reader(const char* path)
{
- ReaderTest* rt = (ReaderTest*)calloc(1, sizeof(ReaderTest));
- SerdReader* reader =
- serd_reader_new(SERD_TURTLE, rt, free, NULL, NULL, test_sink, NULL);
+ ReaderTest* rt = (ReaderTest*)calloc(1, sizeof(ReaderTest));
+ SerdReader* reader = serd_reader_new(SERD_TURTLE,
+ rt,
+ free,
+ test_base_sink,
+ test_prefix_sink,
+ test_statement_sink,
+ test_end_sink);
+
assert(reader);
assert(serd_reader_get_handle(reader) == rt);
@@ -311,7 +394,10 @@ test_reader(const char* path)
const SerdStatus st = serd_reader_read_file(reader, USTR(path));
assert(!st);
- assert(rt->n_statements == 13);
+ assert(rt->n_base == 0);
+ assert(rt->n_prefix == 0);
+ assert(rt->n_statement == 13);
+ assert(rt->n_end == 0);
assert(rt->graph && rt->graph->buf &&
!strcmp((const char*)rt->graph->buf, "http://example.org/"));