aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2021-07-17 17:31:53 -0400
committerDavid Robillard <d@drobilla.net>2022-01-13 23:03:45 -0500
commit30f3e6fc2c1e24c429d5d0b7100dc449ade6703f (patch)
treeb8511de2276fbc23d06dab1c83fd86b4f1a96b10 /test
parentd88b5a797f8502c40d0da964d653a1cd3028c872 (diff)
downloadserd-30f3e6fc2c1e24c429d5d0b7100dc449ade6703f.tar.gz
serd-30f3e6fc2c1e24c429d5d0b7100dc449ade6703f.tar.bz2
serd-30f3e6fc2c1e24c429d5d0b7100dc449ade6703f.zip
Clean up base64 node construction and access API
Diffstat (limited to 'test')
-rw-r--r--test/test_node.c65
1 files changed, 47 insertions, 18 deletions
diff --git a/test/test_node.c b/test/test_node.c
index e296d0b6..1775a669 100644
--- a/test/test_node.c
+++ b/test/test_node.c
@@ -331,7 +331,7 @@ test_get_integer(void)
}
static void
-test_blob_to_node(void)
+test_base64(void)
{
assert(!serd_new_base64(&SERD_URI_NULL, 0, NULL));
@@ -342,14 +342,16 @@ test_blob_to_node(void)
data[i] = (uint8_t)((size + i) % 256);
}
- size_t out_size = 0;
- SerdNode* blob = serd_new_base64(data, size, NULL);
- const char* blob_str = serd_node_string(blob);
- uint8_t* out =
- (uint8_t*)serd_base64_decode(blob_str, serd_node_length(blob), &out_size);
+ SerdNode* blob = serd_new_base64(data, size, NULL);
+ const char* blob_str = serd_node_string(blob);
+ const size_t max_size = serd_get_base64_size(blob);
+ uint8_t* out = (uint8_t*)calloc(1, max_size);
+ const SerdWriteResult r = serd_get_base64(blob, max_size, out);
+ assert(r.status == SERD_SUCCESS);
+ assert(r.count == size);
+ assert(r.count <= max_size);
assert(serd_node_length(blob) == strlen(blob_str));
- assert(out_size == size);
for (size_t i = 0; i < size; ++i) {
assert(out[i] == data[i]);
@@ -363,21 +365,47 @@ test_blob_to_node(void)
serd_free(out);
free(data);
}
+}
+
+static void
+check_get_base64(const char* string,
+ const char* datatype_uri,
+ const char* expected)
+{
+ SerdNode* const node =
+ serd_new_typed_literal(SERD_STRING(string), SERD_STRING(datatype_uri));
+
+ assert(node);
- // Test invalid base64 blob
+ const size_t max_size = serd_get_base64_size(node);
+ char* const decoded = (char*)calloc(1, max_size + 1);
- SerdNode* const blob = serd_new_typed_literal(
- SERD_STRING("!nval!d$"), SERD_STRING(NS_XSD "base64Binary"));
+ const SerdWriteResult r = serd_get_base64(node, max_size, decoded);
+ assert(!r.status);
+ assert(r.count <= max_size);
- const char* const blob_str = serd_node_string(blob);
- size_t out_size = 42;
- uint8_t* out =
- (uint8_t*)serd_base64_decode(blob_str, serd_node_length(blob), &out_size);
+ assert(!strcmp(decoded, expected));
+ assert(strlen(decoded) <= max_size);
- assert(!out);
- assert(out_size == 0);
+ free(decoded);
+ serd_node_free(node);
+}
+
+static void
+test_get_base64(void)
+{
+ check_get_base64("Zm9vYmFy", NS_XSD "base64Binary", "foobar");
+ check_get_base64("Zm9vYg==", NS_XSD "base64Binary", "foob");
+ check_get_base64(" \f\n\r\t\vZm9v \f\n\r\t\v", NS_XSD "base64Binary", "foo");
+
+ SerdNode* const node = serd_new_typed_literal(
+ SERD_STRING("Zm9v"), SERD_STRING(NS_XSD "base64Binary"));
- serd_node_free(blob);
+ char small[2] = {0};
+ const SerdWriteResult r = serd_get_base64(node, sizeof(small), small);
+
+ assert(r.status == SERD_ERR_OVERFLOW);
+ serd_node_free(node);
}
static void
@@ -520,7 +548,8 @@ main(void)
test_get_float();
test_integer();
test_get_integer();
- test_blob_to_node();
+ test_base64();
+ test_get_base64();
test_node_equals();
test_node_from_string();
test_node_from_substring();