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); }
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; }