Fix a bug causing plover_get_program_directory() to fail when executable is in a root directory
2 * Copyright (C) 2016 J. Ali Harlow <ali@juiblex.co.uk>
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.
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.
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.
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"
30 static void verify_package_store(PloverPackageStore *store,
31 GSList *expected_packages)
36 PloverPackage *package;
37 PloverPackageSet *package_set;
41 GSList *expected,*lnk;
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);
55 if (!gtk_tree_model_iter_nth_child(model,&iter,NULL,i))
57 gtk_tree_model_get_value(model,&iter,PLOVER_PACKAGE_STORE_OBJ_COLUMN,
59 package=g_value_dup_object(&value);
60 lnk=g_slist_find(expected,package);
62 g_warning("Unexpected package in store: %s",
63 plover_package_get_name(package));
66 g_object_unref(lnk->data);
67 expected=g_slist_delete_link(expected,lnk);
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).
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);
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,
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);
100 nosummary=g_strconcat("The ",plover_package_get_name(package),
102 g_assert_cmpstr(nosummary,==,s);
105 g_value_unset(&value);
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));
116 static void test_empty(void)
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);
125 static void test_basic(void)
127 PloverPackageSet *package_set;
128 PloverPackageStore *store;
131 package_set=plover_package_set_new_from_yum("../yum-repo-test-dir",NULL,
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);
146 static PloverPackageSet *no_details_new(void)
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);
163 static void test_no_details(void)
165 PloverPackageSet *package_set;
166 PloverPackageStore *store;
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);
180 static void test_remove(void)
182 PloverPackageSet *yum_set,*nodetails_set;
183 PloverPackageStore *store;
186 store=plover_package_store_new();
187 yum_set=plover_package_set_new_from_yum("../yum-repo-test-dir",NULL,&err);
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);
204 int main(int argc,char **argv)
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);