/ .. / / -> download
#include <stdbool.h>
#include <string.h>
#include <libxml/tree.h>
#include <s1kd/brexcheck.h>
#include <s1kd/instance.h>
#include <s1kd/metadata.h>

void test_brexcheck(void)
{
	int err;
	xmlDocPtr doc = xmlReadFile("test.xml", NULL, 0);
	xmlDocPtr brex;
	xmlDocPtr report;
	int opts;

	opts = S1KD_BREXCHECK_VALUES | S1KD_BREXCHECK_SNS | S1KD_BREXCHECK_STRICT_SNS | S1KD_BREXCHECK_NOTATIONS;

	err = s1kdDocCheckDefaultBREX(doc, opts, &report);
	printf("Default BREX: %s\n", err ? "FAIL" : "PASS");
	xmlSaveFile("-", report);
	xmlFreeDoc(report);

	brex = xmlReadFile("brex.xml", NULL, 0);
	err = s1kdDocCheckBREX(doc, brex, opts | S1KD_BREXCHECK_VERBOSE_LOG, &report);
	printf("Custom BREX: %s\n", err ? "FAIL" : "PASS");
	xmlSaveFile("-", report);
	xmlFreeDoc(report);
	xmlFreeDoc(brex);

	xmlFreeDoc(doc);
}

void test_brexcheck_2(void)
{
	char *report;
	int size;
	int opts;

	opts = S1KD_BREXCHECK_VALUES;

	s1kdCheckDefaultBREX("<root/>", 7, opts, &report, &size);
	puts(report);
	free(report);

	s1kdCheckBREX("<root/>", 7, "<root/>", 7, opts, &report, &size);
	puts(report);
	free(report);
}

void test_metadata(void)
{
	xmlDocPtr doc = xmlReadFile("test.xml", NULL, 0);
	xmlChar *issue, *date;

	issue = s1kdDocGetMetadata(doc, BAD_CAST "issue");
	printf("ISSUE: %s\n", (char *) issue);
	xmlFree(issue);

	s1kdDocSetMetadata(doc, BAD_CAST "issue", BAD_CAST "4.1");

	issue = s1kdDocGetMetadata(doc, BAD_CAST "issue");
	printf("ISSUE: %s\n", (char *) issue);
	xmlFree(issue);

	date = s1kdDocGetMetadata(doc, BAD_CAST "issueDate");
	printf("DATE: %s\n", (char *) date);
	xmlFree(date);

	s1kdDocSetMetadata(doc, BAD_CAST "issueDate", BAD_CAST "1970-01-01");

	date = s1kdDocGetMetadata(doc, BAD_CAST "issueDate");
	printf("DATE: %s\n", (char *) date);
	xmlFree(date);

	xmlFreeDoc(doc);
}

void test_metadata_2(void)
{
	char *xml;
	char *date;
	char *result;
	int size;

	xml = "<issueDate year=\"2020\" month=\"05\" day=\"01\"/>";

	date = s1kdGetMetadata(xml, strlen(xml), "issueDate");
	printf("DATE: %s\n", (char *) date);
	free(date);

	s1kdSetMetadata(xml, strlen(xml), "issueDate", "1970-01-01", &result, &size);

	date = s1kdGetMetadata(result, size, "issueDate");
	printf("DATE: %s\n", (char *) date);
	free(date);

	free(result);
}

void test_instance(void)
{
	xmlDocPtr doc = xmlReadFile("test.xml", NULL, 0);
	xmlDocPtr out;
	s1kdApplicability app = s1kdNewApplicability();
	char *result;
	int size;

	s1kdAssign(app, BAD_CAST "version", BAD_CAST "prodattr", BAD_CAST "A");

	out = s1kdDocFilter(doc, app, S1KD_FILTER_DEFAULT);
	xmlSaveFile("-", out);
	xmlFreeDoc(out);

	out = s1kdDocFilter(doc, app, S1KD_FILTER_REDUCE);
	xmlSaveFile("-", out);
	xmlFreeDoc(out);

	out = s1kdDocFilter(doc, app, S1KD_FILTER_SIMPLIFY);
	xmlSaveFile("-", out);
	xmlFreeDoc(out);

	out = s1kdDocFilter(doc, app, S1KD_FILTER_PRUNE);
	xmlSaveFile("-", out);
	xmlFreeDoc(out);

	s1kdFreeApplicability(app);
	xmlFreeDoc(doc);
}

void test_instance_2(void)
{
	s1kdApplicability app = s1kdNewApplicability();
	char *result;
	int size;

	s1kdAssign(app, BAD_CAST "version", BAD_CAST "prodattr", BAD_CAST "A");

	s1kdFilter("<root/>", 7, app, S1KD_FILTER_DEFAULT, &result, &size);

	puts(result);

	free(result);
	s1kdFreeApplicability(app);
}

int main()
{
	test_brexcheck();
	test_brexcheck_2();
	test_metadata();
	test_metadata_2();
	test_instance();
	test_instance_2();

	xmlCleanupParser();

	return 0;
}


/ gopher://khzae.net/0/s1kd/s1kd-tools/src/tools/libs1kd/tests/tests.c
Styles: Light Dark Classic