errorCode initSchema(EXIPSchema* schema, InitSchemaType initializationType) { errorCode tmp_err_code = UNEXPECTED_ERROR; TRY(initAllocList(&schema->memList)); schema->staticGrCount = 0; SET_CONTENT_INDEX(schema->docGrammar.props, 0); schema->docGrammar.count = 0; schema->docGrammar.props = 0; schema->docGrammar.rule = NULL; schema->simpleTypeTable.count = 0; schema->simpleTypeTable.sType = NULL; schema->grammarTable.count = 0; schema->grammarTable.grammar = NULL; schema->enumTable.count = 0; schema->enumTable.enumDef = NULL; /* Create and initialize initial string table entries */ TRY_CATCH(createDynArray(&schema->uriTable.dynArray, sizeof(UriEntry), DEFAULT_URI_ENTRIES_NUMBER), freeAllocList(&schema->memList)); TRY_CATCH(createUriTableEntries(&schema->uriTable, initializationType != INIT_SCHEMA_SCHEMA_LESS_MODE), freeAllocList(&schema->memList)); if(initializationType == INIT_SCHEMA_SCHEMA_ENABLED) { /* Create and initialize enumDef table */ TRY_CATCH(createDynArray(&schema->enumTable.dynArray, sizeof(EnumDefinition), DEFAULT_ENUM_TABLE), freeAllocList(&schema->memList)); } /* Create the schema grammar table */ TRY_CATCH(createDynArray(&schema->grammarTable.dynArray, sizeof(EXIGrammar), DEFAULT_GRAMMAR_TABLE), freeAllocList(&schema->memList)); if(initializationType != INIT_SCHEMA_SCHEMA_LESS_MODE) { /* Create and initialize simple type table */ TRY_CATCH(createDynArray(&schema->simpleTypeTable.dynArray, sizeof(SimpleType), DEFAULT_SIMPLE_GRAMMAR_TABLE), freeAllocList(&schema->memList)); TRY_CATCH(createBuiltInTypesDefinitions(&schema->simpleTypeTable, &schema->memList), freeAllocList(&schema->memList)); // Must be done after createBuiltInTypesDefinitions() TRY_CATCH(generateBuiltInTypesGrammars(schema), freeAllocList(&schema->memList)); schema->staticGrCount = SIMPLE_TYPE_COUNT; } return tmp_err_code; }
END_TEST START_TEST (test_addValueEntry) { EXIStream testStrm; errorCode tmp_err_code = EXIP_UNEXPECTED_ERROR; String testStr = {"TEST-007", 8}; // IV: Initialize the stream { tmp_err_code = initAllocList(&(testStrm.memList)); testStrm.context.bitPointer = 0; testStrm.buffer.bufLen = 0; testStrm.buffer.bufContent = 0; tmp_err_code += createValueTable(&testStrm.valueTable); testStrm.schema = memManagedAllocate(&testStrm.memList, sizeof(EXIPSchema)); fail_unless (testStrm.schema != NULL, "Memory alloc error"); /* Create and initialize initial string table entries */ tmp_err_code += createDynArray(&testStrm.schema->uriTable.dynArray, sizeof(UriEntry), DEFAULT_URI_ENTRIES_NUMBER); tmp_err_code += createUriTableEntries(&testStrm.schema->uriTable, FALSE); } fail_unless (tmp_err_code == EXIP_OK, "initStream returns an error code %d", tmp_err_code); testStrm.gStack->currQNameID.uriId = 1; // http://www.w3.org/XML/1998/namespace testStrm.gStack->currQNameID.lnId = 2; // lang tmp_err_code = addValueEntry(&testStrm, testStr, testStrm.gStack->currQNameID); fail_unless (tmp_err_code == EXIP_OK, "addValueEntry returns an error code %d", tmp_err_code); #if VALUE_CROSSTABLE_USE fail_unless (testStrm.schema->uriTable.uri[testStrm.gStack->currQNameID.uriId].lnTable.ln[testStrm.gStack->currQNameID.lnId].vxTable != NULL, "addValueEntry does not create vxTable"); fail_unless (testStrm.schema->uriTable.uri[testStrm.gStack->currQNameID.uriId].lnTable.ln[testStrm.gStack->currQNameID.lnId].vxTable->count == 1, "addValueEntry does not create correct vxTable"); #endif fail_unless (testStrm.valueTable.count == 1, "addValueEntry does not create global value entry"); destroyDynArray(&testStrm.valueTable.dynArray); destroyDynArray(&testStrm.schema->uriTable.dynArray); freeAllocList(&testStrm.memList); }
errorCode initSchema(EXIPSchema* schema, unsigned char initializationType) { errorCode tmp_err_code = UNEXPECTED_ERROR; tmp_err_code = initAllocList(&schema->memList); if(tmp_err_code != ERR_OK) return tmp_err_code; schema->staticGrCount = 0; schema->docGrammar.contentIndex = 0; schema->docGrammar.count = 0; schema->docGrammar.props = 0; schema->docGrammar.rule = NULL; schema->simpleTypeTable.count = 0; schema->simpleTypeTable.sType = NULL; schema->grammarTable.count = 0; schema->grammarTable.grammar = NULL; schema->enumTable.count = 0; schema->enumTable.enumDef = NULL; /* Create and initialize initial string table entries */ tmp_err_code = createDynArray(&schema->uriTable.dynArray, sizeof(UriEntry), DEFAULT_URI_ENTRIES_NUMBER); if(tmp_err_code != ERR_OK) { freeAllocList(&schema->memList); return tmp_err_code; } tmp_err_code = createUriTableEntries(&schema->uriTable, initializationType != INIT_SCHEMA_SCHEMA_LESS_MODE); if(tmp_err_code != ERR_OK) { freeAllocList(&schema->memList); return tmp_err_code; } if(initializationType == INIT_SCHEMA_SCHEMA_ENABLED) { /* Create and initialize enumDef table */ tmp_err_code = createDynArray(&schema->enumTable.dynArray, sizeof(EnumDefinition), DEFAULT_ENUM_TABLE); if(tmp_err_code != ERR_OK) { freeAllocList(&schema->memList); return tmp_err_code; } } /* Create the schema grammar table */ tmp_err_code = createDynArray(&schema->grammarTable.dynArray, sizeof(EXIGrammar), DEFAULT_GRAMMAR_TABLE); if(tmp_err_code != ERR_OK) { freeAllocList(&schema->memList); return tmp_err_code; } if(initializationType != INIT_SCHEMA_SCHEMA_LESS_MODE) { /* Create and initialize simple type table */ tmp_err_code = createDynArray(&schema->simpleTypeTable.dynArray, sizeof(SimpleType), DEFAULT_SIMPLE_GRAMMAR_TABLE); if(tmp_err_code != ERR_OK) { freeAllocList(&schema->memList); return tmp_err_code; } tmp_err_code = createBuiltInTypesDefinitions(&schema->simpleTypeTable, &schema->memList); if(tmp_err_code != ERR_OK) { freeAllocList(&schema->memList); return tmp_err_code; } // Must be done after createBuiltInTypesDefinitions() tmp_err_code = generateBuiltInTypesGrammars(schema); if(tmp_err_code != ERR_OK) { freeAllocList(&schema->memList); } schema->staticGrCount = SIMPLE_TYPE_COUNT; } return tmp_err_code; }