diff -r 000000000000 -r e07ceadab395 tests/plover-gtk/test-packagestore.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/plover-gtk/test-packagestore.c Fri Mar 22 11:52:49 2019 +0000 @@ -0,0 +1,215 @@ +/* + * 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; +}