From 8e0270ea4d800d4f52d6c563dbb07dbb6e8cd1b7 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 9 Nov 2020 12:11:13 +0100 Subject: Rename test directory --- test/env_test.c | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 test/env_test.c (limited to 'test/env_test.c') diff --git a/test/env_test.c b/test/env_test.c new file mode 100644 index 00000000..1ed7552e --- /dev/null +++ b/test/env_test.c @@ -0,0 +1,95 @@ +/* + Copyright 2011-2020 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#undef NDEBUG + +#include "serd/serd.h" + +#include +#include +#include + +#define USTR(s) ((const uint8_t*)(s)) + +static SerdStatus +count_prefixes(void* handle, const SerdNode* name, const SerdNode* uri) +{ + (void)name; + (void)uri; + + ++*(int*)handle; + return SERD_SUCCESS; +} + +static void +test_env(void) +{ + SerdNode u = serd_node_from_string(SERD_URI, USTR("http://example.org/foo")); + SerdNode b = serd_node_from_string(SERD_CURIE, USTR("invalid")); + SerdNode c = serd_node_from_string(SERD_CURIE, USTR("eg.2:b")); + SerdEnv* env = serd_env_new(NULL); + serd_env_set_prefix_from_strings(env, USTR("eg.2"), USTR("http://example.org/")); + + assert(serd_env_set_base_uri(env, NULL)); + assert(serd_env_set_base_uri(env, &SERD_NODE_NULL)); + assert(serd_node_equals(serd_env_get_base_uri(env, NULL), &SERD_NODE_NULL)); + + SerdChunk prefix; + SerdChunk suffix; + assert(serd_env_expand(env, &b, &prefix, &suffix)); + + SerdNode xnode = serd_env_expand_node(env, &SERD_NODE_NULL); + assert(serd_node_equals(&xnode, &SERD_NODE_NULL)); + + SerdNode xu = serd_env_expand_node(env, &u); + assert(!strcmp((const char*)xu.buf, "http://example.org/foo")); + serd_node_free(&xu); + + SerdNode badpre = serd_node_from_string(SERD_CURIE, USTR("hm:what")); + SerdNode xbadpre = serd_env_expand_node(env, &badpre); + assert(serd_node_equals(&xbadpre, &SERD_NODE_NULL)); + + SerdNode xc = serd_env_expand_node(env, &c); + assert(!strcmp((const char*)xc.buf, "http://example.org/b")); + serd_node_free(&xc); + + assert(serd_env_set_prefix(env, &SERD_NODE_NULL, &SERD_NODE_NULL)); + + const SerdNode lit = serd_node_from_string(SERD_LITERAL, USTR("hello")); + assert(serd_env_set_prefix(env, &b, &lit)); + + const SerdNode blank = serd_node_from_string(SERD_BLANK, USTR("b1")); + const SerdNode xblank = serd_env_expand_node(env, &blank); + assert(serd_node_equals(&xblank, &SERD_NODE_NULL)); + + int n_prefixes = 0; + serd_env_set_prefix_from_strings(env, USTR("eg.2"), USTR("http://example.org/")); + serd_env_foreach(env, count_prefixes, &n_prefixes); + assert(n_prefixes == 1); + + SerdNode shorter_uri = serd_node_from_string(SERD_URI, USTR("urn:foo")); + SerdNode prefix_name; + assert(!serd_env_qualify(env, &shorter_uri, &prefix_name, &suffix)); + + serd_env_free(env); +} + +int +main(void) +{ + test_env(); + return 0; +} -- cgit v1.2.1