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