plugins exts CHANGE ext parsing isolated into a callback
Lots of refactoring and finishing up included.
diff --git a/tests/utests/schema/test_schema.c b/tests/utests/schema/test_schema.c
index 9d19de3..e4c4210 100644
--- a/tests/utests/schema/test_schema.c
+++ b/tests/utests/schema/test_schema.c
@@ -1606,7 +1606,8 @@
/* invalid */
mod_test_yang = "module x { namespace \"urn:x\"; prefix x; import a { prefix a; } a:e; }";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, mod_test_yang, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Extension instance \"a:e\" misses argument element \"name\".", "/x:{extension='a:e'}");
+ CHECK_LOG_CTX("Parsing module \"x\" failed.", NULL,
+ "Extension instance \"a:e\" missing argument element \"name\".", NULL);
mod_test_yin = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<module name=\"x\"\n"
@@ -1621,7 +1622,8 @@
" <a:e/>\n"
"</module>\n";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, mod_test_yin, LYS_IN_YIN, NULL));
- CHECK_LOG_CTX("Extension instance \"a:e\" misses argument element \"name\".", "/x:{extension='a:e'}");
+ CHECK_LOG_CTX("Parsing module \"x\" failed.", NULL,
+ "Extension instance \"a:e\" missing argument element \"name\".", NULL);
mod_test_yin = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<module name=\"x\"\n"
@@ -1636,7 +1638,8 @@
" <a:e name=\"xxx\"/>\n"
"</module>\n";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, mod_test_yin, LYS_IN_YIN, NULL));
- CHECK_LOG_CTX("Extension instance \"a:e\" misses argument element \"name\".", "/x:{extension='a:e'}");
+ CHECK_LOG_CTX("Parsing module \"x\" failed.", NULL,
+ "Extension instance \"a:e\" missing argument element \"name\".", NULL);
mod_test_yin = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<module name=\"x\"\n"
@@ -1653,8 +1656,9 @@
" </a:e>\n"
"</module>\n";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, mod_test_yin, LYS_IN_YIN, NULL));
- CHECK_LOG_CTX("Extension instance \"a:e\" element and its argument element \"name\" are expected in the same namespace, but they differ.",
- "/x:{extension='a:e'}");
+ CHECK_LOG_CTX("Parsing module \"x\" failed.", NULL,
+ "Extension instance \"a:e\" element and its argument element \"name\" are expected in the same namespace, but they differ.",
+ NULL);
mod_test_yin = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<module name=\"x\"\n"
@@ -1671,8 +1675,9 @@
" </a:e>\n"
"</module>\n";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, mod_test_yin, LYS_IN_YIN, NULL));
- CHECK_LOG_CTX("Extension instance \"a:e\" expects argument element \"name\" as its first XML child, but \"value\" element found.",
- "/x:{extension='a:e'}");
+ CHECK_LOG_CTX("Parsing module \"x\" failed.", NULL,
+ "Extension instance \"a:e\" expects argument element \"name\" as its first XML child, but \"value\" element found.",
+ NULL);
}
@@ -1682,6 +1687,7 @@
struct lys_module *mod;
struct lysc_ctx cctx = {0};
struct lysp_ext_instance ext_p = {0};
+ struct lysp_ext_substmt *substmtp;
struct lysp_stmt child = {0};
struct lysc_ext_instance ext_c = {0};
struct lysc_ext_substmt *substmt;
@@ -1703,11 +1709,20 @@
ext_p.format = LY_VALUE_JSON;
ext_p.parent_stmt = LY_STMT_MODULE;
+ LY_ARRAY_NEW_GOTO(UTEST_LYCTX, ext_p.substmts, substmtp, rc, cleanup);
+
+ substmtp->stmt = LY_STMT_ERROR_MESSAGE;
+ substmtp->storage = &ext_p.parsed;
+ /* fake parse */
+ lydict_insert(UTEST_LYCTX, "my error", 0, (const char **)&ext_p.parsed);
+
/* compiled ext instance */
ext_c.parent_stmt = ext_p.parent_stmt;
- // ext_c.parent =
LY_ARRAY_NEW_GOTO(UTEST_LYCTX, ext_c.substmts, substmt, rc, cleanup);
+ substmt->stmt = LY_STMT_ERROR_MESSAGE;
+ substmt->storage = &ext_c.compiled;
+
/*
* error-message
*/
@@ -1717,22 +1732,20 @@
child.format = LY_VALUE_JSON;
child.kw = LY_STMT_ERROR_MESSAGE;
- substmt->stmt = LY_STMT_ERROR_MESSAGE;
- substmt->storage = &ext_c.data;
-
/* compile */
- assert_int_equal(LY_SUCCESS, lys_compile_extension_instance(&cctx, &ext_p, &ext_c));
+ assert_int_equal(LY_SUCCESS, lyplg_ext_compile_extension_instance(&cctx, &ext_p, &ext_c));
/* check */
- assert_string_equal(ext_c.data, "my error");
+ assert_string_equal(ext_c.compiled, "my error");
cleanup:
lydict_remove(UTEST_LYCTX, ext_p.name);
lydict_remove(UTEST_LYCTX, child.stmt);
lydict_remove(UTEST_LYCTX, child.arg);
+ LY_ARRAY_FREE(ext_p.substmts);
+ lydict_remove(UTEST_LYCTX, ext_p.parsed);
LY_ARRAY_FREE(ext_c.substmts);
-
- lydict_remove(UTEST_LYCTX, ext_c.data);
+ lydict_remove(UTEST_LYCTX, ext_c.compiled);
if (rc) {
fail();
}