diff -r 000000000000 -r bbddb595e366 tests/plover-gtk/test-packagefilestore.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/plover-gtk/test-packagefilestore.c Mon Aug 31 07:12:39 2020 +0100 @@ -0,0 +1,112 @@ +/* + * 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 "treemodel.h" + +static PloverPackage *package_getref(const char *name) +{ + GSList *packages,*lnk; + GError *err=NULL; + PloverPackageSet *package_set; + PloverPackage *package; + 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); + packages=plover_package_set_get_packages(package_set); + for(lnk=packages;lnk;lnk=lnk->next) + { + package=lnk->data; + if (!strcmp(plover_package_get_name(package),name)) + break; + } + if (!lnk) + package=NULL; + if (package) + g_object_ref(package); + g_object_unref(package_set); + return package; +} + +static void test_empty(void) +{ + PloverPackage *package; + PloverPackageFileStore *store; + package=package_getref("zappy-tools"); + store=plover_package_file_store_new_from_package(package); + g_object_unref(package); + test_tree_model(GTK_TREE_MODEL(store)); + g_object_unref(store); +} + +static void test_basic(void) +{ + int i; + const char *name; + GValue value={0,}; + GtkTreeModel *model; + GtkTreeIter iter; + PloverPackage *package; + PloverPackageFileStore *store; + GList *expected,*lnk; + package=package_getref("zsh"); + store=plover_package_file_store_new_from_package(package); + g_object_unref(package); + model=GTK_TREE_MODEL(store); + test_tree_model(model); + expected=g_list_prepend(NULL,(gpointer)g_intern_string("/etc/zsh.conf")); + expected=g_list_prepend(expected,(gpointer)g_intern_string("/usr/bin/zsh")); + g_assert_cmpint(gtk_tree_model_get_n_columns(model),==,1); + g_assert_cmpint(gtk_tree_model_get_column_type(model,0),==,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,0,&value); + name=g_value_get_string(&value); + lnk=g_list_find(expected,g_intern_string(name)); + if (!lnk) + g_warning("Unexpected file in zsh package: %s",name); + else + expected=g_list_delete_link(expected,lnk); + g_value_unset(&value); + } + if (expected) + g_warning("%d missing file%s in set, including %s", + g_list_length(expected),g_list_length(expected)==1?"":"s", + expected->data); + 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("/packagefilestore/empty",test_empty); + g_test_add_func("/packagefilestore/basic",test_basic); + retval=g_test_run(); + return retval; +}