tests/plover-gtk/test-packagestore.c
author J. Ali Harlow <ali@juiblex.co.uk>
Fri Jun 08 20:13:30 2018 +0100 (2018-06-08)
changeset 77 bed0d5a4511f
permissions -rw-r--r--
Added tag Release 0.5.4 for changeset 7a98a5020c44
     1 /*
     2  * Copyright (C) 2016  J. Ali Harlow <ali@juiblex.co.uk>
     3  *
     4  * This program is free software; you can redistribute it and/or modify
     5  * it under the terms of the GNU General Public License as published by
     6  * the Free Software Foundation; either version 2 of the License, or
     7  * (at your option) any later version.
     8  *
     9  * This program is distributed in the hope that it will be useful,
    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12  * GNU General Public License for more details.
    13  *
    14  * You should have received a copy of the GNU General Public License along
    15  * with this program; if not, write to the Free Software Foundation, Inc.,
    16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    17  */
    18 
    19 #include <stdlib.h>
    20 #include <string.h>
    21 #include <glib.h>
    22 #include <gdk/gdk.h>
    23 #include <gtk/gtk.h>
    24 #include <razor/razor.h>
    25 #include <plover/package.h>
    26 #include <plover/packageset.h>
    27 #include <plover-gtk/packagestore.h>
    28 #include "treemodel.h"
    29 
    30 static void verify_package_store(PloverPackageStore *store,
    31   GSList *expected_packages)
    32 {
    33     int i;
    34     const char *s;
    35     gchar *nosummary;
    36     PloverPackage *package;
    37     PloverPackageSet *package_set;
    38     GtkTreeModel *model;
    39     GtkTreeIter iter;
    40     GValue value={0,};
    41     GSList *expected,*lnk;
    42     GdkPixbuf *icon;
    43     model=GTK_TREE_MODEL(store);
    44     test_tree_model(model);
    45     expected=g_slist_copy(expected_packages);
    46     g_assert_cmpint(gtk_tree_model_get_n_columns(model),==,PLOVER_PACKAGE_STORE_NO_COLUMNS);
    47     g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_OBJ_COLUMN),==,PLOVER_TYPE_PACKAGE);
    48     g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_INSTALLED_COLUMN),==,G_TYPE_BOOLEAN);
    49     g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_ICON_COLUMN),==,GDK_TYPE_PIXBUF);
    50     g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_NAME_COLUMN),==,G_TYPE_STRING);
    51     g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_VERSION_COLUMN),==,G_TYPE_STRING);
    52     g_assert_cmpint(gtk_tree_model_get_column_type(model,PLOVER_PACKAGE_STORE_SUMMARY_COLUMN),==,G_TYPE_STRING);
    53     for(i=0;;i++)
    54     {
    55 	if (!gtk_tree_model_iter_nth_child(model,&iter,NULL,i))
    56 	    break;
    57 	gtk_tree_model_get_value(model,&iter,PLOVER_PACKAGE_STORE_OBJ_COLUMN,
    58 	  &value);
    59 	package=g_value_dup_object(&value);
    60 	lnk=g_slist_find(expected,package);
    61 	if (!lnk)
    62 	    g_warning("Unexpected package in store: %s",
    63 	      plover_package_get_name(package));
    64 	else
    65 	{
    66 	    g_object_unref(lnk->data);
    67 	    expected=g_slist_delete_link(expected,lnk);
    68 	}
    69 	g_value_unset(&value);
    70 	gtk_tree_model_get_value(model,&iter,
    71 	  PLOVER_PACKAGE_STORE_INSTALLED_COLUMN,&value);
    72 	g_assert_cmpint(G_VALUE_TYPE(&value),==,G_TYPE_BOOLEAN);
    73 	/* Can't check value of installed yet, it
    74 	 * isn't set (or even properly defined).
    75 	 */
    76 	g_value_unset(&value);
    77 	gtk_tree_model_get_value(model,&iter,
    78 	  PLOVER_PACKAGE_STORE_ICON_COLUMN,&value);
    79 	icon=g_value_get_object(&value);
    80 	if (icon)
    81 	    g_assert(GDK_IS_PIXBUF(icon));
    82 	g_value_unset(&value);
    83 	gtk_tree_model_get_value(model,&iter,PLOVER_PACKAGE_STORE_NAME_COLUMN,
    84 	  &value);
    85 	s=g_value_get_string(&value);
    86 	g_assert_cmpstr(plover_package_get_name(package),==,s);
    87 	g_value_unset(&value);
    88 	gtk_tree_model_get_value(model,&iter,
    89 	  PLOVER_PACKAGE_STORE_VERSION_COLUMN,&value);
    90 	s=g_value_get_string(&value);
    91 	g_assert_cmpstr(plover_package_get_version(package),==,s);
    92 	g_value_unset(&value);
    93 	gtk_tree_model_get_value(model,&iter,
    94 	  PLOVER_PACKAGE_STORE_SUMMARY_COLUMN,&value);
    95 	s=g_value_get_string(&value);
    96 	if (*plover_package_get_summary(package))
    97 	    g_assert_cmpstr(plover_package_get_summary(package),==,s);
    98 	else
    99 	{
   100 	    nosummary=g_strconcat("The ",plover_package_get_name(package),
   101 	      " package",NULL);
   102 	    g_assert_cmpstr(nosummary,==,s);
   103 	    g_free(nosummary);
   104 	}
   105 	g_value_unset(&value);
   106     }
   107     if (expected)
   108     {
   109 	package=PLOVER_PACKAGE(expected->data);
   110 	g_warning("%d missing package%s in store, including %s",
   111 	  g_slist_length(expected),g_slist_length(expected)==1?"":"s",
   112 	  plover_package_get_name(package));
   113     }
   114 }
   115 
   116 static void test_empty(void)
   117 {
   118     PloverPackageStore *store;
   119     store=plover_package_store_new();
   120     g_assert(!plover_package_store_get_sets(store));
   121     verify_package_store(store,NULL);
   122     g_object_unref(store);
   123 }
   124 
   125 static void test_basic(void)
   126 {
   127     PloverPackageSet *package_set;
   128     PloverPackageStore *store;
   129     GError *err=NULL;
   130     GSList *expected;
   131     package_set=plover_package_set_new_from_yum("../yum-repo-test-dir",NULL,
   132       &err);
   133     if (!package_set)
   134 	g_error("../yum-repo-test-dir: %s",err->message);
   135     store=plover_package_store_new();
   136     plover_package_store_add_set(store,package_set);
   137     expected=g_slist_copy(plover_package_set_get_packages(package_set));
   138     g_slist_foreach(expected,(GFunc)g_object_ref,NULL);
   139     g_object_unref(package_set);
   140     verify_package_store(store,expected);
   141     g_slist_foreach(expected,(GFunc)g_object_unref,NULL);
   142     g_slist_free(expected);
   143     g_object_unref(store);
   144 }
   145 
   146 static PloverPackageSet *no_details_new(void)
   147 {
   148     struct razor_set *set;
   149     struct razor_importer *importer;
   150     PloverPackageSet *package_set;
   151     importer=razor_importer_create();
   152     razor_importer_begin_package(importer,"no-details","1-1","noarch");
   153     razor_importer_add_details(importer,"","","","");
   154     razor_importer_add_property(importer,"no-details",
   155       RAZOR_PROPERTY_PROVIDES|RAZOR_PROPERTY_EQUAL,"1-1");
   156     razor_importer_finish_package(importer);
   157     set=razor_importer_finish(importer);
   158     package_set=plover_package_set_new_from_razor(set);
   159     razor_set_unref(set);
   160     return package_set;
   161 }
   162 
   163 static void test_no_details(void)
   164 {
   165     PloverPackageSet *package_set;
   166     PloverPackageStore *store;
   167     GSList *expected;
   168     package_set=no_details_new();
   169     store=plover_package_store_new();
   170     plover_package_store_add_set(store,package_set);
   171     expected=g_slist_copy(plover_package_set_get_packages(package_set));
   172     g_slist_foreach(expected,(GFunc)g_object_ref,NULL);
   173     g_object_unref(package_set);
   174     verify_package_store(store,expected);
   175     g_slist_foreach(expected,(GFunc)g_object_unref,NULL);
   176     g_slist_free(expected);
   177     g_object_unref(store);
   178 }
   179 
   180 static void test_remove(void)
   181 {
   182     PloverPackageSet *yum_set,*nodetails_set;
   183     PloverPackageStore *store;
   184     GSList *expected;
   185     GError *err=NULL;
   186     store=plover_package_store_new();
   187     yum_set=plover_package_set_new_from_yum("../yum-repo-test-dir",NULL,&err);
   188     if (!yum_set)
   189 	g_error("../yum-repo-test-dir: %s",err->message);
   190     plover_package_store_add_set(store,yum_set);
   191     nodetails_set=no_details_new();
   192     expected=g_slist_copy(plover_package_set_get_packages(nodetails_set));
   193     g_slist_foreach(expected,(GFunc)g_object_ref,NULL);
   194     plover_package_store_add_set(store,nodetails_set);
   195     plover_package_store_remove_set(store,yum_set);
   196     g_object_unref(nodetails_set);
   197     g_object_unref(yum_set);
   198     verify_package_store(store,expected);
   199     g_slist_foreach(expected,(GFunc)g_object_unref,NULL);
   200     g_slist_free(expected);
   201     g_object_unref(store);
   202 }
   203 
   204 int main(int argc,char **argv)
   205 {
   206     int retval;
   207     gtk_test_init(&argc,&argv,NULL);
   208     g_test_bug_base("mailto:ali@juiblex.co.uk");
   209     g_test_add_func("/packagestore/empty",test_empty);
   210     g_test_add_func("/packagestore/basic",test_basic);
   211     g_test_add_func("/packagestore/no-details",test_no_details);
   212     g_test_add_func("/packagestore/remove",test_remove);
   213     retval=g_test_run();
   214     return retval;
   215 }