ali@38: /* ali@38: * Copyright (C) 2016 J. Ali Harlow ali@38: * ali@38: * This program is free software; you can redistribute it and/or modify ali@38: * it under the terms of the GNU General Public License as published by ali@38: * the Free Software Foundation; either version 2 of the License, or ali@38: * (at your option) any later version. ali@38: * ali@38: * This program is distributed in the hope that it will be useful, ali@38: * but WITHOUT ANY WARRANTY; without even the implied warranty of ali@38: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ali@38: * GNU General Public License for more details. ali@38: * ali@38: * You should have received a copy of the GNU General Public License along ali@38: * with this program; if not, write to the Free Software Foundation, Inc., ali@38: * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ali@38: */ ali@38: ali@38: #include ali@38: #include ali@38: #include ali@38: #include ali@38: #include ali@38: #include ali@38: #include ali@38: #include ali@38: #include ali@38: #include "treemodel.h" ali@38: ali@38: static void verify_package_store(PloverPackageStore *store, ali@38: GSList *expected_packages) ali@38: { ali@38: int i; ali@38: const char *s; ali@38: gchar *nosummary; ali@38: PloverPackage *package; ali@38: PloverPackageSet *package_set; ali@38: GtkTreeModel *model; ali@38: GtkTreeIter iter; ali@38: GValue value={0,}; ali@38: GSList *expected,*lnk; ali@38: GdkPixbuf *icon; ali@38: model=GTK_TREE_MODEL(store); ali@38: test_tree_model(model); ali@38: expected=g_slist_copy(expected_packages); ali@38: g_assert_cmpint(gtk_tree_model_get_n_columns(model),==,PLOVER_PACKAGE_STORE_NO_COLUMNS); ali@38: g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_OBJ_COLUMN),==,PLOVER_TYPE_PACKAGE); ali@38: g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_INSTALLED_COLUMN),==,G_TYPE_BOOLEAN); ali@38: g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_ICON_COLUMN),==,GDK_TYPE_PIXBUF); ali@38: g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_NAME_COLUMN),==,G_TYPE_STRING); ali@38: g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_VERSION_COLUMN),==,G_TYPE_STRING); ali@38: g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_SUMMARY_COLUMN),==,G_TYPE_STRING); ali@38: for(i=0;;i++) ali@38: { ali@38: if (!gtk_tree_model_iter_nth_child(model,&iter,NULL,i)) ali@38: break; ali@38: gtk_tree_model_get_value(model,&iter,PLOVER_PACKAGE_STORE_OBJ_COLUMN, ali@38: &value); ali@38: package=g_value_dup_object(&value); ali@38: lnk=g_slist_find(expected,package); ali@38: if (!lnk) ali@38: g_warning("Unexpected package in store: %s", ali@38: plover_package_get_name(package)); ali@38: else ali@38: { ali@38: g_object_unref(lnk->data); ali@38: expected=g_slist_delete_link(expected,lnk); ali@38: } ali@38: g_value_unset(&value); ali@38: gtk_tree_model_get_value(model,&iter, ali@38: PLOVER_PACKAGE_STORE_INSTALLED_COLUMN,&value); ali@38: g_assert_cmpint(G_VALUE_TYPE(&value),==,G_TYPE_BOOLEAN); ali@38: /* Can't check value of installed yet, it ali@38: * isn't set (or even properly defined). ali@38: */ ali@38: g_value_unset(&value); ali@38: gtk_tree_model_get_value(model,&iter, ali@38: PLOVER_PACKAGE_STORE_ICON_COLUMN,&value); ali@38: icon=g_value_get_object(&value); ali@38: if (icon) ali@38: g_assert(GDK_IS_PIXBUF(icon)); ali@38: g_value_unset(&value); ali@38: gtk_tree_model_get_value(model,&iter,PLOVER_PACKAGE_STORE_NAME_COLUMN, ali@38: &value); ali@38: s=g_value_get_string(&value); ali@38: g_assert_cmpstr(plover_package_get_name(package),==,s); ali@38: g_value_unset(&value); ali@38: gtk_tree_model_get_value(model,&iter, ali@38: PLOVER_PACKAGE_STORE_VERSION_COLUMN,&value); ali@38: s=g_value_get_string(&value); ali@38: g_assert_cmpstr(plover_package_get_version(package),==,s); ali@38: g_value_unset(&value); ali@38: gtk_tree_model_get_value(model,&iter, ali@38: PLOVER_PACKAGE_STORE_SUMMARY_COLUMN,&value); ali@38: s=g_value_get_string(&value); ali@38: if (*plover_package_get_summary(package)) ali@38: g_assert_cmpstr(plover_package_get_summary(package),==,s); ali@38: else ali@38: { ali@38: nosummary=g_strconcat("The ",plover_package_get_name(package), ali@38: " package",NULL); ali@38: g_assert_cmpstr(nosummary,==,s); ali@38: g_free(nosummary); ali@38: } ali@38: g_value_unset(&value); ali@38: } ali@38: if (expected) ali@38: { ali@38: package=PLOVER_PACKAGE(expected->data); ali@38: g_warning("%d missing package%s in store, including %s", ali@38: g_slist_length(expected),g_slist_length(expected)==1?"":"s", ali@38: plover_package_get_name(package)); ali@38: } ali@38: } ali@38: ali@38: static void test_empty(void) ali@38: { ali@38: PloverPackageStore *store; ali@38: store=plover_package_store_new(); ali@38: g_assert(!plover_package_store_get_sets(store)); ali@38: verify_package_store(store,NULL); ali@38: g_object_unref(store); ali@38: } ali@38: ali@38: static void test_basic(void) ali@38: { ali@38: PloverPackageSet *package_set; ali@38: PloverPackageStore *store; ali@38: GError *err=NULL; ali@38: GSList *expected; ali@38: package_set=plover_package_set_new_from_yum("../yum-repo-test-dir",NULL, ali@38: &err); ali@38: if (!package_set) ali@38: g_error("../yum-repo-test-dir: %s",err->message); ali@38: store=plover_package_store_new(); ali@38: plover_package_store_add_set(store,package_set); ali@38: expected=g_slist_copy(plover_package_set_get_packages(package_set)); ali@38: g_slist_foreach(expected,(GFunc)g_object_ref,NULL); ali@38: g_object_unref(package_set); ali@38: verify_package_store(store,expected); ali@38: g_slist_foreach(expected,(GFunc)g_object_unref,NULL); ali@38: g_slist_free(expected); ali@38: g_object_unref(store); ali@38: } ali@38: ali@38: static PloverPackageSet *no_details_new(void) ali@38: { ali@38: struct razor_set *set; ali@38: struct razor_importer *importer; ali@38: PloverPackageSet *package_set; ali@38: importer=razor_importer_create(); ali@38: razor_importer_begin_package(importer,"no-details","1-1","noarch"); ali@38: razor_importer_add_details(importer,"","","",""); ali@38: razor_importer_add_property(importer,"no-details", ali@38: RAZOR_PROPERTY_PROVIDES|RAZOR_PROPERTY_EQUAL,"1-1"); ali@38: razor_importer_finish_package(importer); ali@38: set=razor_importer_finish(importer); ali@38: package_set=plover_package_set_new_from_razor(set); ali@38: razor_set_unref(set); ali@38: return package_set; ali@38: } ali@38: ali@38: static void test_no_details(void) ali@38: { ali@38: PloverPackageSet *package_set; ali@38: PloverPackageStore *store; ali@38: GSList *expected; ali@38: package_set=no_details_new(); ali@38: store=plover_package_store_new(); ali@38: plover_package_store_add_set(store,package_set); ali@38: expected=g_slist_copy(plover_package_set_get_packages(package_set)); ali@38: g_slist_foreach(expected,(GFunc)g_object_ref,NULL); ali@38: g_object_unref(package_set); ali@38: verify_package_store(store,expected); ali@38: g_slist_foreach(expected,(GFunc)g_object_unref,NULL); ali@38: g_slist_free(expected); ali@38: g_object_unref(store); ali@38: } ali@38: ali@38: static void test_remove(void) ali@38: { ali@38: PloverPackageSet *yum_set,*nodetails_set; ali@38: PloverPackageStore *store; ali@38: GSList *expected; ali@38: GError *err=NULL; ali@38: store=plover_package_store_new(); ali@38: yum_set=plover_package_set_new_from_yum("../yum-repo-test-dir",NULL,&err); ali@38: if (!yum_set) ali@38: g_error("../yum-repo-test-dir: %s",err->message); ali@38: plover_package_store_add_set(store,yum_set); ali@38: nodetails_set=no_details_new(); ali@38: expected=g_slist_copy(plover_package_set_get_packages(nodetails_set)); ali@38: g_slist_foreach(expected,(GFunc)g_object_ref,NULL); ali@38: plover_package_store_add_set(store,nodetails_set); ali@38: plover_package_store_remove_set(store,yum_set); ali@38: g_object_unref(nodetails_set); ali@38: g_object_unref(yum_set); ali@38: verify_package_store(store,expected); ali@38: g_slist_foreach(expected,(GFunc)g_object_unref,NULL); ali@38: g_slist_free(expected); ali@38: g_object_unref(store); ali@38: } ali@38: ali@38: int main(int argc,char **argv) ali@38: { ali@38: int retval; ali@38: gtk_test_init(&argc,&argv,NULL); ali@38: g_test_bug_base("mailto:ali@juiblex.co.uk"); ali@38: g_test_add_func("/packagestore/empty",test_empty); ali@38: g_test_add_func("/packagestore/basic",test_basic); ali@38: g_test_add_func("/packagestore/no-details",test_no_details); ali@38: g_test_add_func("/packagestore/remove",test_remove); ali@38: retval=g_test_run(); ali@38: return retval; ali@38: }