Exemple #1
0
END_TEST

START_TEST (test_pushGrammar)
{
	errorCode err = EXIP_UNEXPECTED_ERROR;
	EXIGrammarStack* testGrStack = NULL;
	EXIStream strm;
	EXIGrammar testElementGrammar;
	EXIGrammar testElementGrammar1;
	QNameID emptyQnameID = {URI_MAX, LN_MAX};

	makeDefaultOpts(&strm.header.opts);
	initAllocList(&strm.memList);

#if BUILD_IN_GRAMMARS_USE
	err = createBuiltInElementGrammar(&testElementGrammar1, &strm);
	fail_if(err != EXIP_OK);

	err = createBuiltInElementGrammar(&testElementGrammar, &strm);
	fail_if(err != EXIP_OK);
#endif

	err = pushGrammar(&testGrStack, emptyQnameID, &testElementGrammar1);
	fail_unless (err == EXIP_OK, "pushGrammar returns error code %d", err);
	fail_if(testGrStack->nextInStack != NULL);

	err = pushGrammar(&testGrStack, emptyQnameID, &testElementGrammar);
	fail_unless (err == EXIP_OK, "pushGrammar returns error code %d", err);
	fail_if(testGrStack->nextInStack == NULL);
	fail_if(testGrStack->nextInStack->grammar != &testElementGrammar1);

	freeAllocList(&strm.memList);
}
Exemple #2
0
END_TEST

START_TEST (test_processNextProduction)
{
	errorCode err = EXIP_UNEXPECTED_ERROR;
	EXIStream strm;
	SmallIndex nonTermID_out;
	ContentHandler handler;
	EXIPSchema schema;
	QNameID emptyQnameID = {URI_MAX, LN_MAX};

	initAllocList(&strm.memList);
	initAllocList(&schema.memList);

	err = createDocGrammar(&schema, NULL, 0);
	fail_unless (err == EXIP_OK, "createDocGrammar returns an error code %d", err);

	err = pushGrammar(&strm.gStack, emptyQnameID, &schema.docGrammar);
	fail_unless (err == EXIP_OK, "pushGrammar returns an error code %d", err);

	strm.gStack->currNonTermID = 4;
	err = processNextProduction(&strm, &nonTermID_out, &handler, NULL);
	fail_unless (err == EXIP_INCONSISTENT_PROC_STATE, "processNextProduction does not return the correct error code");

	freeAllocList(&strm.memList);
	freeAllocList(&schema.memList);
}
Exemple #3
0
errorCode parseHeader(Parser* parser)
{
	errorCode tmp_err_code = UNEXPECTED_ERROR;

	tmp_err_code = decodeHeader(&parser->strm);
	if(tmp_err_code != ERR_OK)
		return tmp_err_code;

	parser->strm.gStack = NULL;

	if(parser->strm.schema != NULL)
	{
		/* Schema enabled mode*/
		tmp_err_code = addUndeclaredProductionsToAll(&parser->strm.memList, parser->strm.schema, &parser->strm.header.opts);
		if(tmp_err_code != ERR_OK)
			return tmp_err_code;

		if(WITH_FRAGMENT(parser->strm.header.opts.enumOpt))
		{
			/* Fragment document grammar */
			// TODO: create a Schema-informed Fragment Grammar from the EXIP schema object
			return NOT_IMPLEMENTED_YET;
		}
		else
		{
			tmp_err_code = augmentDocGrammar(&parser->strm.memList, parser->strm.header.opts.preserve, &parser->strm.schema->docGrammar);
			if(tmp_err_code != ERR_OK)
				return tmp_err_code;
		}
	}
	else
	{
		parser->strm.schema = memManagedAllocate(&parser->strm.memList, sizeof(EXIPSchema));
		if(parser->strm.schema == NULL)
			return MEMORY_ALLOCATION_ERROR;

		tmp_err_code = initSchema(parser->strm.schema, INIT_SCHEMA_SCHEMA_LESS_MODE);
		if(tmp_err_code != ERR_OK)
			return tmp_err_code;

		if(WITH_FRAGMENT(parser->strm.header.opts.enumOpt))
		{
			tmp_err_code = createFragmentGrammar(parser->strm.schema, NULL, 0);
			if(tmp_err_code != ERR_OK)
				return tmp_err_code;

			tmp_err_code = augmentFragGrammar(&parser->strm.memList, parser->strm.header.opts.preserve, &parser->strm.schema->docGrammar);
			if(tmp_err_code != ERR_OK)
				return tmp_err_code;
		}
		else
		{
			tmp_err_code = createDocGrammar(parser->strm.schema, NULL, 0);
			if(tmp_err_code != ERR_OK)
				return tmp_err_code;

			tmp_err_code = augmentDocGrammar(&parser->strm.memList, parser->strm.header.opts.preserve, &parser->strm.schema->docGrammar);
			if(tmp_err_code != ERR_OK)
				return tmp_err_code;
		}
	}

	tmp_err_code = pushGrammar(&parser->strm.gStack, &parser->strm.schema->docGrammar);
	if(tmp_err_code != ERR_OK)
		return tmp_err_code;

	if(parser->strm.header.opts.valuePartitionCapacity > 0)
	{
		tmp_err_code = createValueTable(&parser->strm.valueTable);
		if(tmp_err_code != ERR_OK)
			return tmp_err_code;
	}

	return ERR_OK;
}