diff options
author | bapt <bapt@FreeBSD.org> | 2014-07-19 23:44:57 +0000 |
---|---|---|
committer | bapt <bapt@FreeBSD.org> | 2014-07-19 23:44:57 +0000 |
commit | 6f718e3669e9ecc1b1ca407a465d6ee20571a2b8 (patch) | |
tree | ba71cc26671c93ed9809f7cadb07734c0bddb4c7 /contrib/libucl/tests/test_generate.c | |
parent | 6095428430d025abcf6983536297f168bf62b45b (diff) | |
download | FreeBSD-src-6f718e3669e9ecc1b1ca407a465d6ee20571a2b8.zip FreeBSD-src-6f718e3669e9ecc1b1ca407a465d6ee20571a2b8.tar.gz |
MFC: r263648, r264789, r266636
This brings:
- schema validation
- xpath-like interface for ucl objects
Adapt pkg(7) to the new libucl API
Diffstat (limited to 'contrib/libucl/tests/test_generate.c')
-rw-r--r-- | contrib/libucl/tests/test_generate.c | 68 |
1 files changed, 46 insertions, 22 deletions
diff --git a/contrib/libucl/tests/test_generate.c b/contrib/libucl/tests/test_generate.c index b2081ba..5c130e6 100644 --- a/contrib/libucl/tests/test_generate.c +++ b/contrib/libucl/tests/test_generate.c @@ -29,7 +29,8 @@ int main (int argc, char **argv) { - ucl_object_t *obj, *cur, *ar; + ucl_object_t *obj, *cur, *ar, *ref; + const ucl_object_t *found; FILE *out; unsigned char *emitted; const char *fname_out = NULL; @@ -55,62 +56,81 @@ main (int argc, char **argv) obj = ucl_object_typed_new (UCL_OBJECT); /* Create some strings */ cur = ucl_object_fromstring_common (" test string ", 0, UCL_STRING_TRIM); - obj = ucl_object_insert_key (obj, cur, "key1", 0, false); + ucl_object_insert_key (obj, cur, "key1", 0, false); cur = ucl_object_fromstring_common (" test \nstring\n ", 0, UCL_STRING_TRIM | UCL_STRING_ESCAPE); - obj = ucl_object_insert_key (obj, cur, "key2", 0, false); + ucl_object_insert_key (obj, cur, "key2", 0, false); cur = ucl_object_fromstring_common (" test string \n", 0, 0); - obj = ucl_object_insert_key (obj, cur, "key3", 0, false); + ucl_object_insert_key (obj, cur, "key3", 0, false); /* Array of numbers */ + ar = ucl_object_typed_new (UCL_ARRAY); cur = ucl_object_fromint (10); - ar = ucl_array_append (NULL, cur); + ucl_array_append (ar, cur); cur = ucl_object_fromdouble (10.1); - ar = ucl_array_append (ar, cur); + ucl_array_append (ar, cur); cur = ucl_object_fromdouble (9.999); - ar = ucl_array_prepend (ar, cur); + ucl_array_prepend (ar, cur); /* Removing from an array */ cur = ucl_object_fromdouble (1.0); - ar = ucl_array_append (ar, cur); + ucl_array_append (ar, cur); cur = ucl_array_delete (ar, cur); assert (ucl_object_todouble (cur) == 1.0); ucl_object_unref (cur); cur = ucl_object_fromdouble (2.0); - ar = ucl_array_append (ar, cur); + ucl_array_append (ar, cur); cur = ucl_array_pop_last (ar); assert (ucl_object_todouble (cur) == 2.0); ucl_object_unref (cur); cur = ucl_object_fromdouble (3.0); - ar = ucl_array_prepend (ar, cur); + ucl_array_prepend (ar, cur); cur = ucl_array_pop_first (ar); assert (ucl_object_todouble (cur) == 3.0); ucl_object_unref (cur); - obj = ucl_object_insert_key (obj, ar, "key4", 0, false); + ucl_object_insert_key (obj, ar, "key4", 0, false); cur = ucl_object_frombool (true); - obj = ucl_object_insert_key (obj, cur, "key4", 0, false); + /* Ref object to test refcounts */ + ref = ucl_object_ref (cur); + ucl_object_insert_key (obj, cur, "key4", 0, false); /* Empty strings */ cur = ucl_object_fromstring_common (" ", 0, UCL_STRING_TRIM); - obj = ucl_object_insert_key (obj, cur, "key5", 0, false); + ucl_object_insert_key (obj, cur, "key5", 0, false); cur = ucl_object_fromstring_common ("", 0, UCL_STRING_ESCAPE); - obj = ucl_object_insert_key (obj, cur, "key6", 0, false); + ucl_object_insert_key (obj, cur, "key6", 0, false); cur = ucl_object_fromstring_common (" \n", 0, UCL_STRING_ESCAPE); - obj = ucl_object_insert_key (obj, cur, "key7", 0, false); + ucl_object_insert_key (obj, cur, "key7", 0, false); /* Numbers and booleans */ cur = ucl_object_fromstring_common ("1mb", 0, UCL_STRING_ESCAPE | UCL_STRING_PARSE); - obj = ucl_object_insert_key (obj, cur, "key8", 0, false); + ucl_object_insert_key (obj, cur, "key8", 0, false); cur = ucl_object_fromstring_common ("3.14", 0, UCL_STRING_PARSE); - obj = ucl_object_insert_key (obj, cur, "key9", 0, false); + ucl_object_insert_key (obj, cur, "key9", 0, false); cur = ucl_object_fromstring_common ("true", 0, UCL_STRING_PARSE); - obj = ucl_object_insert_key (obj, cur, "key10", 0, false); + ucl_object_insert_key (obj, cur, "key10", 0, false); cur = ucl_object_fromstring_common (" off ", 0, UCL_STRING_PARSE | UCL_STRING_TRIM); - obj = ucl_object_insert_key (obj, cur, "key11", 0, false); + ucl_object_insert_key (obj, cur, "key11", 0, false); cur = ucl_object_fromstring_common ("gslin@gslin.org", 0, UCL_STRING_PARSE_INT); - obj = ucl_object_insert_key (obj, cur, "key12", 0, false); + ucl_object_insert_key (obj, cur, "key12", 0, false); cur = ucl_object_fromstring_common ("#test", 0, UCL_STRING_PARSE_INT); - obj = ucl_object_insert_key (obj, cur, "key13", 0, false); + ucl_object_insert_key (obj, cur, "key13", 0, false); cur = ucl_object_frombool (true); - obj = ucl_object_insert_key (obj, cur, "k=3", 0, false); + ucl_object_insert_key (obj, cur, "k=3", 0, false); + /* Try to find using path */ + /* Should exist */ + found = ucl_lookup_path (obj, "key4.1"); + assert (found != NULL && ucl_object_toint (found) == 10); + /* . should be ignored */ + found = ucl_lookup_path (obj, ".key4.1"); + assert (found != NULL && ucl_object_toint (found) == 10); + /* moar dots... */ + found = ucl_lookup_path (obj, ".key4........1..."); + assert (found != NULL && ucl_object_toint (found) == 10); + /* No such index */ + found = ucl_lookup_path (obj, ".key4.3"); + assert (found == NULL); + /* No such key */ + found = ucl_lookup_path (obj, "key9..key1"); + assert (found == NULL); emitted = ucl_object_emit (obj, UCL_EMIT_CONFIG); @@ -122,5 +142,9 @@ main (int argc, char **argv) } fclose (out); + /* Ref should still be accessible */ + ref->value.iv = 100500; + ucl_object_unref (ref); + return ret; } |