END_TEST START_TEST(test_comps_parse3) { FILE *fp; //char *err_log, char *tmp_ch; COMPS_Parsed *parsed; COMPS_ObjListIt *it; int i; COMPS_ObjList *tmplist; COMPS_LogEntry* known_errors[3]; char *str; COMPS_Object *tmpobj; fprintf(stderr, "## Running test_parse3\n\n"); known_errors[0] = __log_entry_x(COMPS_ERR_ELEM_REQUIRED, 3, comps_str("id"), comps_num(188), comps_num(2)); known_errors[1] = __log_entry_x(COMPS_ERR_ELEM_REQUIRED, 3, comps_str("name"), comps_num(188), comps_num(2)); known_errors[2] = __log_entry_x(COMPS_ERR_ELEM_REQUIRED, 3, comps_str("description"), comps_num(188), comps_num(2)); parsed = comps_parse_parsed_create(); comps_parse_parsed_init(parsed, "UTF-8", 1); fp = fopen("sample_comps_bad1.xml", "r"); comps_parse_file(parsed, fp, NULL); fail_if(parsed->log->entries->first == NULL); check_errors(parsed->log, known_errors, 3); for (i = 0; i < 3; i++) { comps_log_entry_destroy(known_errors[i]); } tmplist = comps_doc_groups(parsed->comps_doc); it = tmplist->first; /*pairlist = comps_rtree_pairs(((COMPS_DocCategory*)it->data)->properties); for (hsit = pairlist->first; hsit != NULL; hsit = hsit->next){ printf("%s = %s\n", ((COMPS_RTreePair*)hsit->data)->key, ((COMPS_RTreePair*)hsit->data)->data); }*/ COMPS_OBJECT_DESTROY(tmplist); tmpobj = comps_docgroup_get_id((COMPS_DocGroup*)it->comps_obj); fail_if(tmpobj, "%d. category should have NULL id\n"); COMPS_OBJECT_DESTROY(tmpobj); tmpobj = comps_docgroup_get_name((COMPS_DocGroup*)it->comps_obj); fail_if(tmpobj, "%d. category should have NULL name\n"); COMPS_OBJECT_DESTROY(tmpobj); tmpobj = comps_docgroup_get_desc((COMPS_DocGroup*)it->comps_obj); fail_if(tmpobj, "%d. category should have NULL description\n"); COMPS_OBJECT_DESTROY(tmpobj); comps_parse_parsed_destroy(parsed); }
PyObject* PyCOMPSGroup_repr(PyObject *self) { char *x; COMPS_Object *id; PyObject *ret; id = comps_docgroup_get_id(((PyCOMPS_Group*)self)->group); x = comps_object_tostr(id); ret = PyUnicode_FromFormat("<libcomps.Group object '%s' at %p>", x, self); free(x); comps_object_destroy(id); return ret; }
END_TEST START_TEST(test_arch) { COMPS_Parsed *parsed; COMPS_Doc *doc2; COMPS_ObjList *arches, *list, *list2; COMPS_DocGroup *g; COMPS_DocCategory *c; COMPS_DocEnv *e; COMPS_DocGroupPackage *p; COMPS_Str *str; int x; COMPS_ObjListIt *it; char *grps[3][5] = {{"group1", "group3", "group4", NULL, NULL}, {"group1", "group2", "group3", "group4", NULL}, {"group3", "group4", NULL, NULL, NULL}}; char *g1_pkgs[3][8] = {{"pkg3", "pkg4", "pkg5", "pkg6", "pkg7", NULL, NULL, NULL}, {"pkg3", "pkg4", "pkg7", NULL, NULL, NULL, NULL, NULL}, {"pkg1", "pkg2", "pkg3", "pkg4", "pkg5", "pkg6", "pkg7", NULL}}; char *cats[3][5] = {{"cat1", "cat4", NULL, NULL, NULL}, {"cat1", "cat2", "cat4", NULL, NULL}, {"cat3", "cat4", NULL, NULL, NULL}}; char *c1_gids[3][9] = {{"g1", "g3", "g4", "g6", "g7", NULL, NULL, NULL, NULL}, {"g1", "g2", "g4", "g5", "g7", NULL, NULL, NULL, NULL}, {"g4", "g5", "g6", "g7", NULL, NULL, NULL, NULL, NULL}}; char *envs[3][5] = {{"env1", "env4", NULL, NULL, NULL}, {"env1", "env2", "env3", "env4", NULL}, {"env1", "env2", "env4", NULL, NULL}}; char *e1_gids[3][8] = {{"g1", "g3", "g4", NULL, NULL, NULL, NULL, NULL}, {"g1", "g2", "g5", NULL, NULL, NULL, NULL, NULL}, {"g2", "g4", NULL, NULL, NULL,NULL, NULL, NULL}}; char *e1_oids[3][8] = {{"o1", "o3", "o4", NULL, NULL, NULL, NULL, NULL}, {"o1", "o2", "o5", NULL, NULL, NULL, NULL, NULL}, {"o2", "o4", NULL, NULL, NULL,NULL, NULL, NULL}}; FILE *fp; //char *tmp; fprintf(stderr, "## Running test_parse arch\n"); parsed = comps_parse_parsed_create(); comps_parse_parsed_init(parsed, "UTF-8", 0); fp = fopen("main_arches.xml", "r"); comps_parse_file(parsed, fp, NULL); //comps_log_print(parsed->log); fail_if(parsed->fatal_error != 0, "Some fatal errors found after parsing"); //comps2xml_f(parsed->comps_doc, "fed2.xml", 0); arches = (COMPS_ObjList*)comps_object_create(&COMPS_ObjList_ObjInfo, NULL); comps_objlist_append_x(arches, (COMPS_Object*)comps_str("x86")); doc2 = comps_doc_arch_filter(parsed->comps_doc, arches); COMPS_OBJECT_DESTROY(arches); list = comps_doc_groups(doc2); ck_assert(list->len == 3); for (it = list->first, x=0; it != NULL; it = it->next, x++) { g = (COMPS_DocGroup*)it->comps_obj; str = (COMPS_Str*)comps_docgroup_get_id(g); ck_assert_msg(strcmp(str->val, grps[0][x]) == 0, "%s != %s", str->val, grps[0][x]); COMPS_OBJECT_DESTROY(str); } g = (COMPS_DocGroup*)list->first->comps_obj; list2 = g->packages; for (x=0, it = list2->first; it != NULL; it = it->next, x++) { //printf("%s\n", ((COMPS_DocGroupPackage*)it->comps_obj)->name->val); if (g1_pkgs[0][x] == NULL) break; ck_assert(strcmp(((COMPS_DocGroupPackage*)it->comps_obj)->name->val, g1_pkgs[0][x]) == 0); } COMPS_OBJECT_DESTROY(list); list = comps_doc_categories(doc2); ck_assert(list->len == 2); for (it = list->first, x=0; it != NULL; it = it->next, x++) { g = (COMPS_DocCategory*)it->comps_obj; str = (COMPS_Str*)comps_doccategory_get_id(g); ck_assert_msg(strcmp(str->val, cats[0][x]) == 0, "%s != %s", str->val, cats[0][x]); COMPS_OBJECT_DESTROY(str); } c = (COMPS_DocCategory*)list->first->comps_obj; list2 = c->group_ids; for (x=0, it = list2->first; it != NULL; it = it->next, x++) { //printf("%s\n", ((COMPS_DocGroupId*)it->comps_obj)->name->val); if (c1_gids[0][x] == NULL) break; ck_assert(strcmp(((COMPS_DocGroupId*)it->comps_obj)->name->val, c1_gids[0][x]) == 0); } COMPS_OBJECT_DESTROY(list); list = comps_doc_environments(doc2); ck_assert(list->len == 2); for (it = list->first, x=0; it != NULL; it = it->next, x++) { g = (COMPS_DocEnv*)it->comps_obj; str = (COMPS_Str*)comps_docenv_get_id(g); ck_assert_msg(strcmp(str->val, envs[0][x]) == 0, "%s != %s", str->val, envs[0][x]); COMPS_OBJECT_DESTROY(str); } e = (COMPS_DocEnv*)list->first->comps_obj; list2 = e->group_list; for (x=0, it = list2->first; it != NULL; it = it->next, x++) { //printf("%s\n", ((COMPS_DocGroupId*)it->comps_obj)->name->val); if (e1_gids[0][x] == NULL) break; ck_assert_msg(strcmp(((COMPS_DocGroupId*)it->comps_obj)->name->val, e1_gids[0][x]) == 0, "%s != %s", ((COMPS_DocGroupId*)it->comps_obj)->name->val, e1_gids[0][x]); } list2 = e->option_list; for (x=0, it = list2->first; it != NULL; it = it->next, x++) { if (e1_oids[0][x] == NULL) break; ck_assert(strcmp(((COMPS_DocGroupId*)it->comps_obj)->name->val, e1_oids[0][x]) == 0); } COMPS_OBJECT_DESTROY(list); COMPS_OBJECT_DESTROY(doc2); comps_parse_parsed_destroy(parsed); }
int PyCOMPSGroup_print(PyObject *self, FILE *f, int flags) { #define _group_ ((PyCOMPS_Group*)self) COMPS_ObjListIt *it; COMPS_HSList *pairlist; COMPS_HSListItem *hsit; char *id, *name, *desc, *lang, *def, *uservis, *disp_ord; COMPS_Object* tmp_prop; (void)flags; tmp_prop = comps_docgroup_get_id(_group_->group); id = (tmp_prop)?comps_object_tostr(tmp_prop):NULL; tmp_prop = comps_docgroup_get_name(_group_->group); name = (tmp_prop)?comps_object_tostr(tmp_prop):NULL; tmp_prop = comps_docgroup_get_desc(_group_->group); desc = (tmp_prop)?comps_object_tostr(tmp_prop):NULL; tmp_prop = comps_docgroup_get_display_order(_group_->group); disp_ord = (tmp_prop)?comps_object_tostr(tmp_prop):NULL; tmp_prop = comps_docgroup_get_langonly(_group_->group); lang = (tmp_prop)?comps_object_tostr(tmp_prop):NULL; tmp_prop = comps_docgroup_get_def(_group_->group); def = (tmp_prop)?comps_object_tostr(tmp_prop):NULL; tmp_prop = comps_docgroup_get_uservisible(_group_->group); uservis = (tmp_prop)?comps_object_tostr(tmp_prop):NULL; fprintf(f, "<COMPS_Group: id='%s', name='%s', description='%s', " "default='%s', uservisible='%s', lang_only='%s', display_order=%s ", id, name, desc, def, uservis, lang, disp_ord); free(id); free(name); free(desc); free(lang); free(def); free(uservis); free(disp_ord); fprintf(f, "name_by_lang={"); pairlist = comps_objrtree_pairs(_group_->group->name_by_lang); for (hsit = pairlist->first; hsit != pairlist->last; hsit = hsit->next) { name = comps_object_tostr(((COMPS_ObjRTreePair*)hsit->data)->data); printf("'%s': '%s', ", ((COMPS_ObjRTreePair*)hsit->data)->key, name); free(name); } if (hsit) { name = comps_object_tostr(((COMPS_ObjRTreePair*)hsit->data)->data); printf("'%s': '%s'}", ((COMPS_ObjRTreePair*)hsit->data)->key, name); free(name); } else { printf("}"); } comps_hslist_destroy(&pairlist); fprintf(f, ", desc_by_lang={"); pairlist = comps_objrtree_pairs(_group_->group->desc_by_lang); for (hsit = pairlist->first; hsit != pairlist->last; hsit = hsit->next) { name = comps_object_tostr(((COMPS_ObjRTreePair*)hsit->data)->data); printf("'%s': '%s', ", ((COMPS_ObjRTreePair*)hsit->data)->key, name); free(name); } if (hsit) { name = comps_object_tostr(((COMPS_ObjRTreePair*)hsit->data)->data); printf("'%s': '%s'}", ((COMPS_ObjRTreePair*)hsit->data)->key, name); free(name); } else { printf("}"); } comps_hslist_destroy(&pairlist); fprintf(f, ", packages=["); if (_group_->group->packages) { for (it = _group_->group->packages->first; it != _group_->group->packages->last; it = it->next){ id = comps_object_tostr(it->comps_obj); fprintf(f,"%s, ", id); free(id); } if (it) { id = comps_object_tostr(it->comps_obj); fprintf(f,"%s", id); free(id); } } fprintf(f, "]>"); return 0; #undef _group_ }
signed char comps_docgroup_xml(COMPS_DocGroup *group, xmlTextWriterPtr writer, COMPS_Log *log, COMPS_XMLOptions *xml_options, COMPS_DefaultsOptions *def_options) { COMPS_ObjListIt *it; COMPS_Object *obj; COMPS_HSList *pairlist; COMPS_HSListItem *hsit; static char* props[] = {"id", "name", "name", "desc", "desc", "def", "uservisible", "biarchonly", "display_order", "langonly"}; static size_t type[] = {0, 0, offsetof(COMPS_DocGroup, name_by_lang), 0, offsetof(COMPS_DocGroup, desc_by_lang), 0, 0, 0, 0, 0}; static char* aliases[] = {NULL, NULL, NULL, "description", "description", "default", NULL, NULL, NULL, NULL}; static bool explicit[] = {true, true, true, true, true, false, false, false, true, true}; const char *str_true = "true"; const char *str_false = "false"; const char *default_val[] = {NULL, NULL, NULL, NULL, NULL, def_options->default_default?str_true:str_false, def_options->default_uservisible?str_true:str_false, def_options->default_biarchonly?str_true:str_false, NULL, NULL}; static char*(*tostrf[])(COMPS_Object*) = {&comps_object_tostr, &comps_object_tostr, &comps_object_tostr, &comps_object_tostr, &comps_object_tostr, &__comps_num2boolstr, &__comps_num2boolstr, &__comps_num2boolstr, &comps_object_tostr, &comps_object_tostr}; char *str; int ret; explicit[5] = xml_options->default_explicit; explicit[6] = xml_options->uservisible_explicit; explicit[7] = xml_options->biarchonly_explicit; if (group->packages->len == 0 && !xml_options->empty_groups) { obj = comps_docgroup_get_id(group); comps_log_error(log, COMPS_ERR_PKGLIST_EMPTY, 1, obj); COMPS_OBJECT_DESTROY(obj); return 1; } ret = xmlTextWriterStartElement(writer, BAD_CAST "group"); COMPS_XMLRET_CHECK() if (xml_options->arch_output) { obj = (COMPS_Object*)comps_docgroup_arches(group); ret = __comps_xml_arch(obj, writer); COMPS_XMLRET_CHECK() COMPS_OBJECT_DESTROY(obj); } for (int i=0; i<10; i++) { //printf("%s\n", props[i]); if (!type[i]) { obj = comps_objdict_get_x(group->properties, props[i]); if (explicit[i]) { if (obj) { str = tostrf[i](obj); __comps_xml_prop((aliases[i])?aliases[i]:props[i], str, writer); free(str); } else if (default_val[i]){ __comps_xml_prop((aliases[i])?aliases[i]:props[i], (char*)default_val[i], writer); } } else { if (obj) { str = tostrf[i](obj); if (!default_val[i] || (strcmp(str, default_val[i]) != 0)) { __comps_xml_prop((aliases[i])?aliases[i]:props[i], str, writer); } free(str); } } } else { if (*(void**)(((char*)group)+type[i]) == (void*)group->name_by_lang){